Tkinter a subwindow obnovení

Tkinter a subwindow obnovení
« kdy: 03. 10. 2022, 14:17:19 »
Ahoj, poradí prosím někdo, jak refreshnout okno, které je otevřené jako sub pod root? Já ho otevřu kompletně v nové metodě po kliknutí na tlačítko a v novém okně chci řešit config. Problém ovšem je, že se mi správně nevyplní z načteného configu hodnoty, ty se objeví vyplněné až po zavolání nějaké nesmyslné funkce, takže Checkbuttony jsou prázdné, ale kupříkladu po zavolání fd() sice dostanu, že fd neexistuje, ale okno se obnoví a checkboxy jsou vyplněné.

Nějaký nápad, prosím? :)


tecka

  • ***
  • 152
    • Zobrazit profil
    • E-mail
Re:Tkinter a subwindow obnovení
« Odpověď #1 kdy: 03. 10. 2022, 16:28:05 »
Můžeš více rozepsat, co přesně děláš, z jakého konfigu a jak ty hodnoty nastavuješ? Ideálně přímo zdroják.

Re:Tkinter a subwindow obnovení
« Odpověď #2 kdy: 03. 10. 2022, 19:13:58 »
Díky.

Kód: [Vybrat]
def openConfig():

    configwindow = tk.Toplevel(root)
    configwindow.title("Config")
    configwindow.geometry("320x150")

    config = configparser.ConfigParser()
    config.read('config.conf')

    jedna = tk.IntVar()
    dva = tk.IntVar()
    tri = tk.IntVar()
    ctyri = tk.IntVar()

    jedna.set(int(config.get('modules', 'jedna')))
    dva.set(int(config.get('modules', 'dva')))
    tri.set(int(config.get('modules', 'tri')))
    ctyri.set(int(config.get('modules', 'ctyri')))

    checkjedna = tk.Checkbutton(configwindow, text="jedna", variable=jedna, onvalue=1, offvalue=0)
    checkdva = tk.Checkbutton(configwindow, text="dva", variable=dva, onvalue=1, offvalue=0)
    checktri = tk.Checkbutton(configwindow, text="tri", variable=tri, onvalue=1, offvalue=0)
    checkctyri = tk.Checkbutton(configwindow, text="ctyri", variable=ctyri, onvalue=1, offvalue=0)

    checkjedna.place(x=10, y=10)
    checkdva.place(x=10, y=30)
    checktri.place(x=10, y=50)
    checkctyri.place(x=10, y=70)
    btn = tk.Button(configwindow, text='Save',command=lambda: test(), width=20)


    btn.place(x=50, y=90)

tohle vážně funguje, když dám na konec za btn.place třeba nesmysl()
potom to vypíše neznámou funkci, ale checkbuttony jsou vyplněny. Když tam ten nesmysl nedám, jsou buttony prázdné.

tecka

  • ***
  • 152
    • Zobrazit profil
    • E-mail
Re:Tkinter a subwindow obnovení
« Odpověď #3 kdy: 03. 10. 2022, 21:47:21 »
Nevím, proč to při vyjímce zafunguje, ale nejspíš jen náhodou a/nebo dočasně. Problém bych viděl v tom, že ty proměnné jsou lokální a po skončení funkce se zruší.

Takže tipuju, že tu funkci test máš jen jako dočasný placeholder a až v ní ty proměnné použiješ (nebo někam uložíš nebo něco, prostě aby "přežily"), tak by to mělo fungovat.
Kód: [Vybrat]
def openConfig():
    ...
    checkctyri.place(x=10, y=70)

    btn = tk.Button(configwindow, text='Save', command=lambda: test(), width=20)
    btn.place(x=50, y=90)

    def test():
        print(jedna.get(), dva.get(), tri.get(), ctyri.get())