Menüs in Tkinter

Fragen zu Tkinter.
lbuega
User
Beiträge: 75
Registriert: Dienstag 15. April 2003, 08:51
Wohnort: Weissach

Bugfix hat geschrieben: [...] Fehler des Optionsmenüs entfernt die NIE in Tkinter übernommen wurden sind.
Falsch. Hab mal in Tkinter.py nachgeschaut, die haben das tatsächlich umgestetzt. Ist ziemlich genauso wie in dem Patch beschrieben in Tkinter.py (ab Zeile 2890 bei Python-Version 2.2.2) übernommen worden!!! Schau mal nach.

Trotzdem stell ich mich noch zu blöd an und krieg das Pulldown-Menü vom OptionMenu nicht konfiguriert :cry: aber dass muss doch gehen, ist ja lt. Quellcode ja ein ganz normales Menu-Objekt... Aber wie???
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

lbuega hat geschrieben:aber dass muss doch gehen, ist ja lt. Quellcode ja ein ganz normales Menu-Objekt...
Leider nicht. OptionMenu ist von MenuButton abgeleitet. Ich vermute mal, dass Du keine Chance hast, sowas wie eine Callback-Funktion anzubinden. In solchen Fällen, wenn also keine Callback-Funktion anbindbar ist, wird tatsächlich empfohlen, über eine Zeitfunktion alle Nase lang auf Änderungen einer Variablen zu reagieren. Scheint bei einigen Tkinter-Widgets nötig zu sein.

Einen interessanten Artikel fand ich aber eben noch: http://groups.google.de/groups?ie=UTF-8 ... 1.deja.com. Vielleicht kannst Du da noch was mit anfangen.

Jan
Gast

:D YEAH, habs z.T. geschafft. Es geht doch: Nach intensivem Quellcode-Studium von Tkinter.py hab ich rausgefunden wie man ein "command" an die Items im Pulldown-Menü eines OptionMenu binden:

Code: Alles auswählen

from Tkinter import*

root = Tk()
root.config(bg="grey")

auswahl_1 = StringVar()
liste_1 = ["item1", "item2", "item3"]
aussehen = {"bg":"grey","font":"arial 10 bold","relief":SUNKEN, "width":15, "activebackground":"darkblue", "activeforeground":"white"}
auswahl_1.set("Auswahl treffen")

def holla(self):
    print "HEHE!!!"

#'command' ist das einzige keyword das unterstützt wird!
com = {"command":holla}

menu_1 = OptionMenu(root, auswahl_1, *liste_1, **com)
menu_1.pack(padx=20, pady=20)
menu_1.config(aussehen)

#wie kann ich auf das interne menu zugreifen??? Z.B. um Farbe zu ändern etc.
#menu_1.self.menu.add_command(label="TEST", command=holla)

root.mainloop()
Aber damit ist mein Aussehen-Problem noch nicht behoben :x

Voges, könntest Du mal bitte ein Blick in die Tkinter.py (codzeile s.voriger Beitrag) werfen, da ist nämlich die OptionMenu-Klasse. Dort wird u.a. das Pulldownmenü als ganz normales Objekt der Klasse "Menu" erstellt, aber wie kann ich da von aussen darauf zugreifen, um z.B. den Hintergrundfarbe/Schrift/etc. zu konfigurieren? :(
Du scheinst da mehr die Ahnung von zu haben wie das funktioniert.
lbuega
User
Beiträge: 75
Registriert: Dienstag 15. April 2003, 08:51
Wohnort: Weissach

Sorry, war mal wieder nicht angemeldet...
Voges hat geschrieben:Leider nicht. OptionMenu ist von MenuButton abgeleitet.
das ist richtig, aber in der Klasse OptionMenu wird u.a. auch folgendes Objekt erstellen:

Code: Alles auswählen

menu = self.__menu = Menu(self, name="menu", tearoff=0)
und mit

Code: Alles auswählen

menu.add_command(label=value, .... siehe Tkinter.py
werden dann die entsprechenden in den values übergebenen Einträge aufgebaut. Leider ist es mir da aber noch nicht gelungen auf des menu zuzugreifen um es quasi optisch an meine GUI anzupassen!!! Naja, dabei hab ich wenigstens das mit dem optionalen "command" entdeckt.
lbuega
User
Beiträge: 75
Registriert: Dienstag 15. April 2003, 08:51
Wohnort: Weissach

help!?! :(
lbuega
User
Beiträge: 75
Registriert: Dienstag 15. April 2003, 08:51
Wohnort: Weissach

ach, hab mir nun so geholfen dass ich mir die OptionMenu-Klasse direkt aus dem Originalcode der Tkinter.py rauskopiert und dann geringfügig modifiziert habe. Dadurch kann es nun komplett (auch optisch) angepasst werden.

Danke für die Hilfe soweit.
Antworten