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