[Python-de] Menue mit Tkinter

Albert Hermeling Albert.Hermeling at t-online.de
Mit Sep 3 21:02:03 CEST 2003


Am Mittwoch, 3. September 2003 09:33 schrieb Heike C. Zimmerer:
> Albert.Hermeling at t-online.de (Albert Hermeling) writes:
> > Guten Abend,

Guten Abend Heike,

> Leider ist das Skript so nicht lauffähig. 
Pardon da habe ich wol zu viel gespart am Ende folgt noch mal das ganze Skript 
jetzt lauffähige Skript.

> Ansehen schon auffällt, ist die Tatsache, dass Du nirgends einen
> Packer aufrufst. 
Stimmt, aber daran kann es ja eigentlich nicht liegen. Im Buch python 2 steht 
auf Seite 243 :

 "Am Ende bindet man dieses Menue an das Toplevel-Widget mit Hilfe der 
Ressourche menu." 

In meinem kleinen Skript ist tk das Toplevel-Widget somit brauche ich keinen  
Packer oder verstehe ich das was falsch?

Hier noch mal das Skript im ganzen:

import Tkinter
from Tkconstants import *


def dateien():
    pass

def ende():
    pass

def hilfe():
    pass

def about():
    pass

def version():
    pass

startMenue=[("Start",dateien),None,("Benden",ende)]
hilfeMenue=[("Hilfe",hilfe),("About",about),None,("Version",version)]

allMenues=[("Start",startMenue),("Hilfe",hilfeMenue)]


tk=Tkinter.Tk()

menuebar=Tkinter.Menu(tk)


for label, menue in allMenues:
    popup=Tkinter.Menu(menuebar)
    for item in menue:
        if item:
            label, command = item
            popup.add_command(label=label, command=command)
        else:
            popup.add_separator()
    popup.add_cascade(menu=popup, label=label)
tk.configure(menu=menuebar)

tk.mainloop()

Die Popup-Menues habe ich für die Menueleiste in Listen bestehend aus Tupeln 
(Name, Command) gespeichert. In der ersten Schleife werden die Tupel, die in 
der Liste allMenues gespeichert sind, den Variablen label und menue 
zugewiesen. In der zweiten Schleife wird zuerst geprueft ob es sich um ein 
Menue handelt oder nicht, wenn nicht wird ein Separater eingefuegt, wenn ja 
wird das Tupel entpakt und ein Menueeintrag hinzugefuegt.

Ist die zweite Schleife abgearbeitet wird mit popup.add_cascade das Menue 
"eingehangen".

Ist die erste Schleife abgearbeitet soll mit tk.configure(menu=menuebar) das 
Menue eingebunden werden.

Soweit die Theorie in der Praxis erscheint bei mir kein Menue :-((.

So, ich hoffe das war jetzt nicht zu ausfuerlich wenn doch bitte ich schon mal 
um Endschuldigung.

Ich wuensche noch einen schoenen Abend

Albert Hermeling