Zaškrtávací políčka v Tkinteru

Zaškrtávací políčka v Tkinteru
« kdy: 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ě.

Kód: [Vybrat]
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?
« Poslední změna: 13. 09. 2022, 15:55:33 od Petr Krčmář »


Re:Zaškrtávací políčka v Tkinteru
« Odpověď #1 kdy: 13. 09. 2022, 20:31:10 »
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)

tecka

  • ***
  • 138
    • Zobrazit profil
    • E-mail
Re:Zaškrtávací políčka v Tkinteru
« Odpověď #2 kdy: 14. 09. 2022, 06:42:05 »
Kód: [Vybrat]
test1 = tk.BooleanVar()
test2 = tk.BooleanVar()
...
test1.get()  # True / False
A ty parametry onvalue a offvalue nemusíš nastavovat.


jano6

Re:Zaškrtávací políčka v Tkinteru
« Odpověď #4 kdy: 15. 09. 2022, 14:36:03 »
Tu je funkčný program pre check button:

Kód: [Vybrat]
#!/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()