Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: veskotskujehnusne 13. 09. 2022, 15:30:22

Název: Zaškrtávací políčka v Tkinteru
Přispěvatel: 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ě.

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?
Název: Re:Zaškrtávací políčka v Tkinteru
Přispěvatel: snugar_i 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)
Název: Re:Zaškrtávací políčka v Tkinteru
Přispěvatel: tecka 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.
Název: Re:Zaškrtávací políčka v Tkinteru
Přispěvatel: strojar 14. 09. 2022, 18:30:02
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)
Název: Re:Zaškrtávací políčka v Tkinteru
Přispěvatel: jano6 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()