Menüs in Tkinter

Fragen zu Tkinter.
Pythonaya
User
Beiträge: 90
Registriert: Sonntag 26. Januar 2003, 11:34
Wohnort: Großbeeren (nahe Berlin)

Mittwoch 9. Juli 2003, 14:18

Hallo,
weiß jemand, wie man DropDown-Menüs in Tk erstellt???



MFG,
Florian
Bugfix
User
Beiträge: 30
Registriert: Mittwoch 9. Juli 2003, 15:58

Mittwoch 9. Juli 2003, 16:19

Moin !

Hier mal ein Beispiel :

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()
BuGFiX
Pythonaya
User
Beiträge: 90
Registriert: Sonntag 26. Januar 2003, 11:34
Wohnort: Großbeeren (nahe Berlin)

Mittwoch 9. Juli 2003, 19:06

Ja, das kenn ich auch!
Eine DropDown-Leiste bzw. Menübar...
Ich meine ein DropDownmenü, wie z.B. die Addresseneingabe im Internet Explorer.
Ein Textwidget, wo rechts daneben ein Button mit einem Pfeil ist, um das Menü auszufahren.


MFG,
Florian
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Mittwoch 9. Juli 2003, 20:09

Mache zwar nicht in TKInter, aber icgh hab mal aus Lusts und Laune gestöbert. Wenn ich das richtig gesehen habe, meinst du eine Combobox oder eine Listbox. Hoffe das hilft dir schon weiter.

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

Freitag 11. Juli 2003, 11:02

Voilá:

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()
Doch hier beginnt nun mein Problem:
Wie kann ich das Aussehen des OptionMenu definieren? Sämtliche Zuweisungen wie bei anderen Widgets üblich funktionieren nicht!?!
Gast

Freitag 11. Juli 2003, 11:28

ist, dass der eintrag "Bitte auswählen" nach der Wahl eines Items nicht mehr sichtbar wird.

mfg

roland

:roll: mir ist klar, dass ich keine hilfe war:D
Gast

Freitag 11. Juli 2003, 13:07

@rolgal: ??? äh, das ließe sich schon einrichten - macht aber meines erachtens dann wenig Sinn! Sobald du ja einmal was ausgewählt hast, solltest Du ja wissen wo man wählen muß und zudem willst Du die Auswahl ja auch sehen!?!. Kannst ja statt "Bitte auswählen" auch z.B. die aktuelle gesetzte Einstellung aus einer Datei auslesen und anzeigen lassen (wenn da eben die Auswahl gespeichert ist und wird) oder eben eine default-Auswahl aus der Liste...
Gast

Samstag 12. Juli 2003, 11:37

naja, kommt wohl drauf an, wieviele menüs es dann geben soll???

bei einem ist es egal, ich bin aber davon ausgegangen, dass es mehrere werde und ja nicht beim text "bitte auswählen" bleibt.....

um es zu verdeutlichen, der menünamen "bookmarks" (im browser) verschwindet ja auch net, wenn du einen links ausgewählt hast.

mfg

roland
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Samstag 12. Juli 2003, 12:21

das sind aber zwei verschiedene paar Stiefe, äh Menus ;)
gast,alias rolgal

Samstag 12. Juli 2003, 14:15

es ging ja nur darum ob der menü namen sichtbar ist oder nicht???
lbuega
User
Beiträge: 75
Registriert: Dienstag 15. April 2003, 08:51
Wohnort: Weissach

Montag 14. Juli 2003, 08:05

Bevor hier noch mehr aneinander vorbeigeredet wird: Hat vielleicht jmd. eine Antwort auf meine Frage (s.o.: Wie kann ich das Aussehen des "OptionMenu" definieren? Sämtliche Zuweisungen wie bei anderen Tkinter-Widgets üblich funktionieren nämlich nicht!?!)
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Montag 14. Juli 2003, 09:33

Hallo!

Aus Deinem Code:
firmaAuswahl = OptionMenu(root, auswahl, *liste).pack()
Sowas mach' ich auch hin und wieder gerne. Hier ruftst Du pack() auf und pack() gibt immer None zurück. Richtig:
firmaAuswahl = OptionMenu(root, auswahl, *liste)
firmaAuswahl.pack()
firmaAuswahl['menu'].configure(fg="red")

Ob man die einzelnen Menüeiträge konfigurieren kann, weiß ich nicht. Ansonsten gugel mal in comp.lang.python noch "OptionMenu". Meist wird empfohlen, das OptionMenu der MegaWidgets zu verwenden.

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

Montag 14. Juli 2003, 15:40

Voges hat geschrieben:... und pack() gibt immer None zurück.
genau die Fehlermeldung gabs die ganze Zeit... :?
Voges hat geschrieben:Richtig:
firmaAuswahl = OptionMenu(root, auswahl, *liste)
firmaAuswahl.pack()
firmaAuswahl['menu'].configure(fg="red")
Puhh, so funktioniert das Ganze wie gewohnt... und ich dachte schon das OptionMenu sei nicht konfigurierbar! :oops:
Voges hat geschrieben:Ob man die einzelnen Menüeiträge konfigurieren kann, weiß ich nicht. ...
Das benötige ich nichtmal, standardmässiges konfigurieren recht schon völlig aus.

Hab herzlichen Dank! Einfach Spitze Deine Hilfe (und die der vielen anderen im Forum) :D
Gast

Montag 21. Juli 2003, 12:25

lbuega hat geschrieben:
Voges hat geschrieben:Ob man die einzelnen Menüeiträge konfigurieren kann, weiß ich nicht. ...
Das benötige ich nichtmal, standardmässiges konfigurieren recht schon völlig aus.
mmmh, Fehlanzeige. Nun benötig ich's doch. Aber unter den Optionen scheint sich keine Möglichkeit zu finden :?:

Des weiteren hab ich das Problem, dass sich die Itemliste des 2. Auswahlmenüs in Abhängigkeit der Auswahl des 1. Menüs ändern soll:

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()
Bugfix
User
Beiträge: 30
Registriert: Mittwoch 9. Juli 2003, 15:58

Montag 21. Juli 2003, 14:12

Das Ding scheint immernoch Fehler zu haben, ich hab über Google dazu was gefunden :

http://mail.python.org/pipermail/patche ... 00137.html

Dort wurden anscheinend ein paar Fehler des Optionsmenüs entfernt die NIE in Tkinter übernommen wurden sind. Bzw nun veraltet sind...
Diese Version scheint aber auch Commands zu akzeptieren... :)

Mal testen...

*
Habe mich damit mal befasst, aber einen Command in so ein Optionsmenü zu bekommen will bei mir nicht gehen ?!?
Antworten