Seite 1 von 1
Wo speichert Tkinter Status der Menubutton Items ?
Verfasst: Freitag 23. November 2007, 13:36
von snakeseven
Hallo,
wo speichert Tkinter den Status der Menubutton Items ? Ich möchte die selectierten Items als Settings abspeichern und sie wieder restoren können. Also, nach dem Laden der Settings sollen die entsprechenden Häkchen wieder gesetzt sein.
Grüße, Seven
Verfasst: Freitag 23. November 2007, 14:15
von HWK
Verfasst: Samstag 24. November 2007, 08:00
von snakeseven
Hi HWK,
das hat mir sehr weitergeholfen. Geht wirklich einfach.
Gruß, Seven
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
from Tkinter import Tk,Menubutton,Menu,IntVar
root = Tk()
eins = IntVar()
zwei = IntVar()
def zeige_control_variablen():
print eins.get()," ",zwei.get()
#----------------------- Menubutton---------------------------
auswahl = Menubutton(text="Auswahl")
auswahl.menu = Menu(auswahl, tearoff=0)
auswahl["menu"] = auswahl.menu
auswahl.menu.add_checkbutton(label="1", variable=eins , command = zeige_control_variablen)
auswahl.menu.add_checkbutton(label="2", variable=zwei, command = zeige_control_variablen)
auswahl.pack()
root.mainloop()
Verfasst: Samstag 24. November 2007, 08:42
von snakeseven
Das geht auch mit einer Liste von Control Variablen. Allerdings erscheint mir meine Methode etwas umständlich. Bestimmt kann mir einer sagen, wie es besser geht!? Meine derzeitige Methode:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
from Tkinter import Tk,Menubutton,Menu,IntVar
root = Tk()
eintraege = ["0","1","2","3"]
control_vars = []
for i in eintraege: control_vars.append(IntVar())
def zeige_control_variablen(sel):
for n in control_vars: print n.get(),
print
auswahl = Menubutton(text="Auswahl")
auswahl.menu = Menu(auswahl, tearoff=0)
auswahl["menu"] = auswahl.menu
index=0
for n in eintraege:
auswahl.menu.add_checkbutton(label=n, variable=control_vars[index], command = lambda obj=control_vars[index]: zeige_control_variablen(obj))
index += 1
auswahl.pack()
root.mainloop()
Verfasst: Samstag 24. November 2007, 09:43
von BlackJack
Ein paar einfache Veränderungen.
Code: Alles auswählen
from Tkinter import Tk, Menubutton, Menu, IntVar
root = Tk()
eintraege = ['0', '1', '2', '3']
control_vars = [IntVar() for dummy in eintraege]
def zeige_control_variablen():
print ' '.join(str(v.get()) for v in control_vars)
auswahl = Menubutton(text='Auswahl')
menu = Menu(auswahl, tearoff=0)
auswahl['menu'] = menu
for eintrag, control_var in zip(eintraege, control_vars):
menu.add_checkbutton(label=eintrag,
variable=control_var,
command=zeige_control_variablen)
auswahl.pack()
root.mainloop()
Das Argument von `zeige_control_variablen()` wurde nicht verwendet, also ist auch das ``lambda`` nicht nötig. Ist natürlich sehr unschön, dass das alles auf Modulebene steht, das Menü wäre besser in einer Klasse aufgehoben.
Verfasst: Samstag 24. November 2007, 10:29
von snakeseven
In der Anwendung, in der ich das verwende, hat die GUI eine eigene Klasse. Deine Verbesserungsvorschläge wurden gleich absorbiert. Gefallen mir! Die ZIP-Funktion muß ich allerdings erstmal verstehen. Werd schon mal Google anwerfen.
Gruß, Seven