Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: veskotskujehnusne 13. 09. 2022, 15:30:22
-
Ahoj, potřebuji požádat o radu. Asi to nějak špatně chápu z dokumentace, ale chová se mi to divně.
from tkinter import ttk
test1 = True
test2 = True
button1 = ttk.Checkbutton(window, text="first", variable=test1, onvalue=True, offvalue=False)
button1.place(x=10, y=10)
button2 = ttk.Checkbutton(window, text="second", variable=test2, onvalue=True, offvalue=False)
button2.place(x=10, y=30)
Potíž tohoto kódu je, že mi nedá dva Checkbuttony, které budou oba zaškrtnuté, místo toho nejsou vyplněné a navíc se chovají jako group, tedy když jeden zaškrtnu, zaškrtne se i druhý. Poradí prosím někdo?
-
Pythonu rozumím jako koza petrželi a Tkinter neznám vůbec, ale tipnul bych si, že je to tím, že ty proměnný musí být nějaký mutable objekty, ve kterých je teprv ta True/False hodnota, aby na nich šlo volat get a set - on nemůže měnit přímo hodnotu té promenné, ale jenom na ní volat set na novou hodnotu, pokud to podporuje (viz ten IntVar(), který používají defaultně v ukázce)
-
test1 = tk.BooleanVar()
test2 = tk.BooleanVar()
...
test1.get() # True / False
A ty parametry onvalue a offvalue nemusíš nastavovat.
-
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-knihovna-tkinter-2-cast/#k11 (https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-knihovna-tkinter-2-cast/#k11)
-
Tu je funkčný program pre check button:
#!/usr/bin/python
from tkinter import Tk, Frame, Checkbutton
from tkinter import BooleanVar, BOTH
class Example(Frame):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.master.title("Checkbutton")
self.pack(fill=BOTH, expand=True)
self.var = BooleanVar()
cb = Checkbutton(self, text="Show title",
variable=self.var, command=self.onClick)
cb.select()
cb.place(x=50, y=50)
def onClick(self):
if self.var.get() == True:
self.master.title("Checkbutton")
else:
self.master.title("")
def main():
root = Tk()
root.geometry("250x150+300+300")
app = Example()
root.mainloop()
if __name__ == '__main__':
main()