Menüs in Tkinter
Verfasst: Mittwoch 9. Juli 2003, 14:18
Hallo,
weiß jemand, wie man DropDown-Menüs in Tk erstellt???
MFG,
Florian
weiß jemand, wie man DropDown-Menüs in Tk erstellt???
MFG,
Florian
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
from Tkinter import *
import Tkinter
def function():
print 'Funktion !'
root = Tk()
menu = Menu(root)
root.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label='Datei', menu=filemenu)
filemenu.add_command(label='New', command=function)
filemenu.add_command(label='Öpen...', command=function)
filemenu.add_command(label='Save', command=function)
filemenu.add_command(label='Save as', command=function)
filemenu.add_separator()
filemenu.add_command(label='Quit', command=function)
helpmenu = Menu(menu)
menu.add_cascade(label='Help', menu=helpmenu)
helpmenu.add_command(label='About', command=function)
mainloop()
Code: Alles auswählen
from Tkinter import*
root = Tk()
auswahl = StringVar()
#wenn keine StringVar(), wird Auswahl nicht angezeigt
liste = ["item1", "item2", "item3"]
auswahl.set("Bitte auswählen")
#ODER ALTERNATIV: auswahl.set(liste[2])
firmaAuswahl = OptionMenu(root, auswahl, *liste).pack()
#ODER ALTERNATIV: OptionMenu(root, auswahl, "item1", "item2", "usw.")
root.mainloop()
genau die Fehlermeldung gabs die ganze Zeit...Voges hat geschrieben:... und pack() gibt immer None zurück.
Puhh, so funktioniert das Ganze wie gewohnt... und ich dachte schon das OptionMenu sei nicht konfigurierbar!Voges hat geschrieben:Richtig:
firmaAuswahl = OptionMenu(root, auswahl, *liste)
firmaAuswahl.pack()
firmaAuswahl['menu'].configure(fg="red")
Das benötige ich nichtmal, standardmässiges konfigurieren recht schon völlig aus.Voges hat geschrieben:Ob man die einzelnen Menüeiträge konfigurieren kann, weiß ich nicht. ...
mmmh, Fehlanzeige. Nun benötig ich's doch. Aber unter den Optionen scheint sich keine Möglichkeit zu findenlbuega hat geschrieben:Das benötige ich nichtmal, standardmässiges konfigurieren recht schon völlig aus.Voges hat geschrieben:Ob man die einzelnen Menüeiträge konfigurieren kann, weiß ich nicht. ...
Code: Alles auswählen
from Tkinter import*
root = Tk()
root.config(bg="grey")
auswahl_1 = StringVar()
auswahl_2 = StringVar()
liste_1 = ["item1", "item2", "item3"]
liste_2 = ["Auswahl treffen"]
aussehen = {"bg":"grey","font":"arial 10 bold","relief":SUNKEN, "width":15, "activebackground":"darkblue", "activeforeground":"white"}
auswahl_1.set("Auswahl treffen")
auswahl_2.set("Auswahl treffen")
menu_1 = OptionMenu(root, auswahl_1, *liste_1)
menu_1.pack(padx=20, pady=20)
menu_1.config(aussehen)
menu_2 = OptionMenu(root, auswahl_2, *liste_2)
menu_2.pack(padx=20, pady=20)
menu_2.config(aussehen)
def change(event):
#je nach Auswahl, menu_2-Inhalt aufbauen
if auswahl_1.get() == "item1":
liste_neu = ["a", "b", "c"]
elif auswahl_1.get() == "item2":
liste_neu = ["x1", "x2", "x3"]
else auswahl_1.get() == "item3":
liste_neu = ["Hund", "Katze", "Maus"]
#PROBLEM: wie funktioniert die Inhalts-Zuweisung zu menu_2 ?!?
menu_1.bind("<...?...>", change) #PROBLEM: <ButtonRelease-1> funktioniert nicht, da sich da ja erst die Dropdown-Liste aufklappt und noch keine Auswahl getroffen wurde.
root.mainloop()
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.Bugfix hat geschrieben: [...] Fehler des Optionsmenüs entfernt die NIE in Tkinter übernommen wurden sind.
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.lbuega hat geschrieben:aber dass muss doch gehen, ist ja lt. Quellcode ja ein ganz normales Menu-Objekt...
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()
das ist richtig, aber in der Klasse OptionMenu wird u.a. auch folgendes Objekt erstellen:Voges hat geschrieben:Leider nicht. OptionMenu ist von MenuButton abgeleitet.
Code: Alles auswählen
menu = self.__menu = Menu(self, name="menu", tearoff=0)
Code: Alles auswählen
menu.add_command(label=value, .... siehe Tkinter.py