Event Auslösen wenn Checkbutton verändert wurde

Fragen zu Tkinter.
Antworten
dominik123
User
Beiträge: 35
Registriert: Montag 10. Februar 2014, 08:48

Hallo,

in meinem GUI sind verschiedene Checkbuttons eingebaut. Sobald einer dieser Checkbuttons verändert wurde, möchte ich ein Ausführen der Funktion, welche durch den "Start"-Button ausgelöst wird solange verhindern, bis ein 2. Button ("Save") gedrückt wurde.
Gibt es irgendeine Möglichkeit dies über einen Event- Handler zu realisieren? Bzw. was wäre das entsprechende Event?

Danke im Voraus!

Viele Grüße,
Dominik
Schorlem
User
Beiträge: 40
Registriert: Dienstag 3. Juni 2014, 16:37

Die einfachste Möglichkeit wäre, dies über die "command"-Eigenschaft des Checkbuttons zu machen, die immer dann aufgerufen wird, wenn der Checkbutton verändert wird:

Code: Alles auswählen

checkbutton = tk.Checkbutton(command=lambda: button_start.configure(state=tk.DISABLED))
button_save = tk.Button(command=lambda: button_start.configure(state=tk.NORMAL))
Das unglückliche daran wäre halt nur, dass der "Start"-Button auch gesperrt bleibt, wenn die Änderung des Checkbuttons zurückgenommen wird ;)
Diese Nachricht wurde maschinell erstellt und ist daher ohne Unterschrift gültig.
dominik123
User
Beiträge: 35
Registriert: Montag 10. Februar 2014, 08:48

Vielen Dank!
Diese Möglichkeit würde mir für den Anfang schon reichen, allerdings wird der Start Button bei mir mit diesem Command nicht deaktiviert.
Schorlem
User
Beiträge: 40
Registriert: Dienstag 3. Juni 2014, 16:37

Welche Funktion meinst du genau? Im Moment ist es ganz einfach so gelöst, dass der Save-Button den Checkbutton wieder aktiviert. Später musst du das ganze sowieso in eine eigene Funktion/Methode packen, da du wahrscheinlich mehr machen willst als nur (de)aktivieren von Widgets ;)
Diese Nachricht wurde maschinell erstellt und ist daher ohne Unterschrift gültig.
BlackJack

@dominik123: Doch wird er, oder Du hast ein ganz spezielles Tk was anders funktioniert als bei allen anderen Leuten. ;-)
dominik123
User
Beiträge: 35
Registriert: Montag 10. Februar 2014, 08:48

Vielen Dank für die Antworten.
Das Problem war nicht der Befehl, ich hatte noch andere Fehler in meinem GUI.
Nun läuft alles.
Gibt es eine Möglichkeit ein Popup erscheinen zu lassen, sobald jemand auf den inaktiven ('disabled') Start- Button klickt?
Mein Popup würde wie folgt aussehen:

Code: Alles auswählen

def popup(self):
    top = Toplevel()
    top.title("")
    top.geometry('180x80')
    top.resizable(0,0)
    label = Label(top, text="Please save values first!")
    label.pack()
    button = Button(top, text="OK", command=top.destroy)
    button.pack()  
BlackJack

@dominik123: Naja, da würde man dann eher die Schaltfläche nicht deaktivieren sondern dort entscheiden ob man die Aktion durchführt oder den Hinweis anzeigt.

Für so einfache Informationsdialoge gibt's in der Standardbibliothek übrigens schon was im `tkMessageBox`-Modul.
Schorlem
User
Beiträge: 40
Registriert: Dienstag 3. Juni 2014, 16:37

Code: Alles auswählen

button.bind("<ButtonRelease>", lambda x: tk.messagebox.showinfo(message="Blubb") if button["state"] == tk.DISABLED else None)
"Schön" in eine Zeile gepackt. Wie BlackJack bereits angemerkt hat, kannst du lieber die Tk-eigenen Infoboxen verwenden.
Diese Nachricht wurde maschinell erstellt und ist daher ohne Unterschrift gültig.
Antworten