Seite 1 von 1
checkbox abfragen
Verfasst: Sonntag 15. Juli 2018, 14:30
von magifix
Hallo, ich habe eine ckeckbox bei Tkinter eingesetzt
CheckVar1=tk.IntVar()
c1=tk.Checkbutton(text="Serie", variable=CheckVar1, onvalue=1, offvalue=0)
c1.place(y=645, x=120, width=80)
wie frage ich deren Zustand nun ab?
ich habe mit mal folgendes anzeigen lassen, egal ob akiviert oder nicht
print (CheckVar1)
Tkinter.intvar instance at ......
Re: checkbox abfragen
Verfasst: Sonntag 15. Juli 2018, 16:09
von __blackjack__
Die `*Var`-Datentypen haben `get()`- und `set()`-Methoden um den Wert der darin gekapselt ist, abzufragen oder zu setzen.
`place()` solltest Du nicht verwenden. GUIs mit absoluten Koordinaten werden zum absoluten Albtraum wenn man da einmal Änderungen vornehmen muss, und ob die auf anderen Systemen als auf dem wo man sie entworfen/getestet hat, richtig angezeigt werden, oder gar unbenutzbar sind, kann man auch nicht vorhersagen.
Die Namen sind schlecht gewählt. Weder `CheckVar1` noch `c1` verraten dem Leser was die Werte in dem Programm bedeuten. Das will man ja aber wissen wenn man das liest. `CheckVar1` ist zudem in MixedCase geschrieben, müsste also dem Namen nach eigentlich eine Klasse sein. Namen für alles ausser Klassen und Konstanten schreibt man in Python klein_mit_unterstrichen.
Edit: Falls die 0 und die 1 eigentlich für Wahrheitswerte stehen sollten: Es gibt auch `tk.BooleanVar`.
Re: checkbox abfragen
Verfasst: Sonntag 15. Juli 2018, 20:05
von magifix
Diesen Codeschnipsel hatte ich im Netz gefunden und 1:1 übernommen.
ich hatte übrigens mit place bessere Erfahrung als mit pack gemacht
was nun richtig ist weiß ich nun aber immer noch nicht
Re: checkbox abfragen
Verfasst: Sonntag 15. Juli 2018, 22:09
von wuf
Hi magifix
Hier etwas zum ausprobieren:
Code: Alles auswählen
from functools import partial
import tkinter as tk
APP_TITLE = "My first checkbox"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 350
APP_HEIGHT = 200
def checkbox_callback(var_checkbox):
print("Checkbox Status beim Anklicken:", var_checkbox.get())
def main():
app_win = tk.Tk()
app_win.title(APP_TITLE)
app_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
app_win.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
CheckVar1=tk.IntVar()
c1=tk.Checkbutton(app_win, text="Serie", variable=CheckVar1, onvalue=1,
offvalue=0, command=partial(checkbox_callback, CheckVar1))
#c1.place(y=645, x=120, width=80)
c1.pack(expand=True)
# Setze die Checkbox auf wahr
CheckVar1.set(1)
print("Checkbox Status beim Start:", CheckVar1.get())
app_win.mainloop()
if __name__ == '__main__':
main()
Gruss wuf
Re: checkbox abfragen
Verfasst: Montag 16. Juli 2018, 06:16
von Sirius3
@wuf: wenn man Variablen benutzt, fragt man am besten gleich deren Statusänderung ab:
Code: Alles auswählen
import tkinter as tk
APP_TITLE = "My first checkbox"
def series_callback(status):
print("Checkbox Status:", status.get())
def main():
app_win = tk.Tk()
app_win.title(APP_TITLE)
series_checked = tk.BooleanVar(app_win, True)
series_checked.trace("w", lambda *_: series_callback(series_checked))
tk.Checkbutton(app_win, text="Serie", variable=series_checked).pack()
app_win.mainloop()
if __name__ == '__main__':
main()
Re: checkbox abfragen
Verfasst: Montag 16. Juli 2018, 15:15
von wuf
@Sirius3: Meine
trace Variante;
Code: Alles auswählen
from functools import partial
import tkinter as tk
APP_TITLE = "My first checkbox"
def series_callback(status, *args):
print("Checkbox Status:", status.get())
def main():
app_win = tk.Tk()
app_win.title(APP_TITLE)
series_checked = tk.BooleanVar(app_win, True)
series_checked.trace("w", partial(series_callback, series_checked))
tk.Checkbutton(app_win, text="Serie", variable=series_checked).pack(padx=10,
pady=10)
app_win.mainloop()
if __name__ == '__main__':
main()
Für mich ist
*args besser lesbar als
*_