Wo speichert Tkinter Status der Menubutton Items ?

Fragen zu Tkinter.
Antworten
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

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()
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

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()
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.
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

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
Antworten