Rätselhafte Checkbox reaktion!

Fragen zu Tkinter.
Antworten
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

Hallo meine freunde,
ich Rätsel schon seit genau 3 Tagen daran wieso die Checkbox die Variable nicht auf 1 setzt bzw. wieso kein harken zusehen ist! Wenn man die funktion Settings aufruft erscheint der Harken in meinem TK Frame, wenn man aber nun die Funktion durch ein Filemenü aufruft, bleibt die Variable auf 0 sowie der Harken wird nicht gesetzt.

Schaut es euch am besten selber an !

Code: Alles auswählen

from tkinter import *
from tkinter import ttk

def Settings():


    Settings = Tk()
    Settings.title("General settings")
    Settings.resizable(width=False, height=False)

    content = ttk.Frame(master=Settings)
    content.grid(column=0, row=0)

    search_T_lbl = ttk.Label(content, text="Search in title:")
    search_S_lbl = ttk.Label(content, text="Search in Section")

    # Settings Checkboxes
    onevar = IntVar()
    twovar_t = IntVar(value=1)
    threevar_t = IntVar()
    fourvar_t = IntVar()
    onevar_s = IntVar()
    twovar_s = IntVar()
    threevar_s = IntVar()
    fourvar_s = IntVar()

    onevar.set(2)
    twovar_t.set(1)
    threevar_t.set(1)
    fourvar_t.set(0)
    onevar_s.set(1)
    twovar_s.set(0)
    threevar_s.set(0)
    fourvar_s.set(1)


    visiblevar = IntVar()
    visiblevar.set(1)

    # title checkboxes/Buttons
    one_t = Checkbutton(content, text="One", onvalue=2, offvalue=-2, variable=onevar)
    two_t = Checkbutton(content, text="Two", variable=twovar_t)
    three_t = Checkbutton(content, text="Three", variable=1)
    four_t = Checkbutton(content, text="Four", variable=fourvar_t)

    one_b_t = Button(content, text="...", command=lambda: why("Text_T_1"))
    two_b_t = Button(content, text="...", command=lambda: why("Text_T_2"))
    three_b_t = Button(content, text="...", command=lambda: why("Text_T_3"))
    four_b_t = Button(content, text="...", command=lambda: why("Text_T_4"))

    #
    visible_ = Checkbutton(content, text="Browser visible:", variable=visiblevar, onvalue=1, offvalue=0)
    save_t = ttk.Button(content, text="Save", command=lambda: save_settings(search_T_1.get(), search_T_2.get(), search_T_3.get(), search_T_4.get(),
                                                                            search_T_1.get(), search_S_2.get(), search_S_3.get(), search_S_4.get()))

    # section checkboxes/buttons
    one_s = Checkbutton(content, text="One1", variable=onevar_s)
    two_s = Checkbutton(content, text="Two", variable=twovar_s)
    three_s = Checkbutton(content, text="Three", variable=threevar_s)
    four_s = Checkbutton(content, text="Four", variable=fourvar_s)

    one_b_s = ttk.Button(content, text="...", command=lambda: why("Text_S_1"))
    two_b_s = ttk.Button(content, text="...", command=lambda: why("Text_S_2"))
    three_b_s = ttk.Button(content, text="...", command=lambda: why("Text_S_3"))
    four_b_s = ttk.Button(content, text="...", command=lambda: why("Text_S_4"))



    one_t.grid(column=1, row=1, padx=2, pady=2)
    two_t.grid(column=1, row=2, padx=2, pady=2)
    three_t.grid(column=1, row=3, padx=2, pady=2)
    four_t.grid(column=1, row=4, padx=2, pady=2)


    Settings.mainloop()

def main():
    main = Tk()
    main.title("Test")
    main.resizable(width=False, height=False)

    content_main = ttk.Frame(main, height=500, width=500)
    content_main.grid(column=0, row=0)

    #Menu
    menubar = Menu(main)
    filemenu = Menu(menubar, tearoff=0)
    filemenu.add_command(label="General Settings", command=Settings)
    filemenu.add_command(label="Exit", command=main.quit)

    #Menu Seperator
    menubar.add_cascade(label="Configuration", menu=filemenu)
    main.config(menu=menubar)

    main.mainloop()
main()
Settings()
wie gesagt es ist die gleiche Funktion die ihr im Menü aufrufen könnt oder die sich im nachhinein öffnet! :K
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@phoenixx592: wo hier welche Haken gesetzt sein sollen, versteh ich nicht. Generell darf es nur eine Tk-Instanz geben und nur einen mainloop. Weitere Fenster macht man mit `tk.TopLevel`. Sternchenimporte vermeiden. Es werden viele Knöpfe erzeugt, die nicht verwendet werden und Funktionen aufrufen, die nicht existieren. Bitte das Beispiel auf das Nötigste reduzieren.
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

Wenn du den Code in den Editor schiebst und in ausführst, wird die Settings Option über das Menü anders ausgegeben als wenn man, die Funktion so ausführt. Der Unterschied ist, dass die Checkboxen aktiviert sind und bei der Funktion über das Filemenü nicht! Obwohl das die geliche Funktion ist, woran liegt das?
:K

Dein Cleancode!

Code: Alles auswählen

from tkinter import *
from tkinter import ttk

def Settings():


    Settings = Tk()
    Settings.title("General settings")
    Settings.resizable(width=False, height=False)

    content = ttk.Frame(master=Settings)
    content.grid(column=0, row=0)

    # Settings Checkboxes
    onevar = IntVar()
    twovar_t = IntVar(value=1)
    threevar_t = IntVar()
    fourvar_t = IntVar()
    onevar_s = IntVar()
    twovar_s = IntVar()
    threevar_s = IntVar()
    fourvar_s = IntVar()

    onevar.set(2)
    twovar_t.set(1)
    threevar_t.set(1)
    fourvar_t.set(0)
    onevar_s.set(1)
    twovar_s.set(0)
    threevar_s.set(0)
    fourvar_s.set(1)


    visiblevar = IntVar()
    visiblevar.set(1)

    # title checkboxes/Buttons
    one_t = Checkbutton(content, text="One", onvalue=2, offvalue=-2, variable=onevar)
    two_t = Checkbutton(content, text="Two", variable=twovar_t)
    three_t = Checkbutton(content, text="Three", variable=1)
    four_t = Checkbutton(content, text="Four", variable=fourvar_t)

    one_t.grid(column=1, row=1, padx=2, pady=2)
    two_t.grid(column=1, row=2, padx=2, pady=2)
    three_t.grid(column=1, row=3, padx=2, pady=2)
    four_t.grid(column=1, row=4, padx=2, pady=2)


    Settings.mainloop()

def main():
    main = Tk()
    main.title("Test")
    main.resizable(width=False, height=False)

    content_main = ttk.Frame(main, height=500, width=500)
    content_main.grid(column=0, row=0)

    #Menu
    menubar = Menu(main)
    filemenu = Menu(menubar, tearoff=0)
    filemenu.add_command(label="General Settings", command=Settings)
    filemenu.add_command(label="Exit", command=main.quit)

    #Menu Seperator
    menubar.add_cascade(label="Configuration", menu=filemenu)
    main.config(menu=menubar)

    main.mainloop()
main()
Settings()
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

Du hattest recht mein bester Lag an der Toplevel instanz.

VIELEN DANK!
Antworten