OptionMenu liste ändern

Fragen zu Tkinter.
Antworten
haggi
User
Beiträge: 42
Registriert: Mittwoch 27. Februar 2008, 10:18
Kontaktdaten:

Donnerstag 3. April 2008, 12:26

Ich würde gerne die Liste in einem OptionMenu popup ändern.

Ich habe 2 OptionMenus. Wenn nun im 1. Menu ein Wert selektiert wird, dann soll sich die Liste im optionMenu nummer 2 ändern.

Geht das ohne weiteres?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Donnerstag 3. April 2008, 14:35

haggi
User
Beiträge: 42
Registriert: Mittwoch 27. Februar 2008, 10:18
Kontaktdaten:

Donnerstag 3. April 2008, 14:41

Danke für den Link.

Aber leider scheint das nicht ganz das zu sein was ich benötige. Zumindest wenn ich das Beispiel korrekt verstanden habe.

Hier wird nur gezeugt wie ein OptionMenu erzeugt wird, nicht jedoch wie die Liste eines schon bestehenden Menus geändert werden kann.
Peter Gerlach
User
Beiträge: 24
Registriert: Donnerstag 14. Februar 2008, 18:16

Montag 7. April 2008, 20:32

Versuch es doch mal so:

Code: Alles auswählen

from Tkinter import * 

class Test:
    def __init__(self):
        self.root = Tk()
        self.zei = StringVar()
        self.zei.set('0')
        self.f1 = Frame(self.root)
        self.f1.pack()
        self.f2 = Frame(self.root)
        self.f2.pack()
        self.b1 = Button(self.f2, text = 'kurze Version', command = self.ab)
        self.b1.pack()
        self.b2 = Button(self.f2, text = 'lange Version', command = self.up)
        self.b2.pack()
        self.o1 = OptionMenu(self.f1, self.zei, '0', '1', '2', '3', '4')
        self.o1.pack()
        self.root.mainloop()

    def ab(self):
        self.o1.destroy()
        self.o2 = OptionMenu(self.f1, self.zei, '0', '1')
        self.o2.pack()

    def up(self):
        self.o2.destroy()
        self.o1 = OptionMenu(self.f1, self.zei, '0', '1', '2', '3', '4')
        self.o1.pack()

b = Test()
Das heißt, Du zerstörst das OptionMenü jedesmal und baust es neu hin, weil sich die Menueliste anders nicht ändern lässt. Das Widget steht hier in einem eigenen Frame, damit es der Packer bei der Neubildung nicht unten dran wirft.
.
Zuletzt geändert von Peter Gerlach am Montag 7. April 2008, 21:09, insgesamt 1-mal geändert.
haggi
User
Beiträge: 42
Registriert: Mittwoch 27. Februar 2008, 10:18
Kontaktdaten:

Montag 7. April 2008, 22:39

Danke.

So ähnlich habe ich es auch gelöst. Ist nur etwas nervig, weil ich meine widgets gerne mit place() platziere und ich dann erst die Daten auslesen muss um das wieder neu erzeugte widget an die gleiche Stelle zu packen. Funktionniert aber.
Antworten