Folgendes Script startet ein Fenster mit einem Menü (2 enüpunkte).
Beide Menüpunkte öffnen ein weiteres kleines Fensterchen.
Code: Alles auswählen
# -*- coding: utf-8 -*-
# File: main.py
from Tkinter import *
class KMM:
def __init__(self):
self.hauptframe = Tk()
self.hauptframe.title('KM Manager (Hauptfenster)')
self.hauptframe.name = 'KMM'
#~ width = self.hauptframe.winfo_screenwidth() - 8
#~ height = self.hauptframe.winfo_screenheight()
width = 400
height = 200
self.hauptframe.maxsize(width, height)
self.hauptframe.wm_geometry("%dx%d+%d+%d" % (width, height, 30, 30))
KMMMenu(self.hauptframe)
self.hauptframe.mainloop()
class KMMMenu:
def __init__(self, master):
# Menueinstanz erzeugen
menuobj = Menu(master)
# Die Menueinstanz dem Fenster zuordnen
master['menu'] = menuobj
if master.name == 'KMM':
# Eine Untermenueinstanz erzeugen
mnuArbeitsbereiche = Menu(menuobj)
mnuArbeitsbereiche['tearoff'] = 0
menuobj.add_cascade(label = 'Arbeitsbereich', menu = mnuArbeitsbereiche)
# wenn ein Menüpunkt mit einem Separator beendet werden soll, dann 1:
ABsdef = {'SunMoon' : 1, 'Hauptflugbuch' : 0}
ABs = ABsdef.keys()
for mi in ABs:
mnuArbeitsbereiche.add_command(label = mi, command = lambda:KFrame(master, mi))
if ABsdef[mi]:
mnuArbeitsbereiche.add_separator()
class KFrame :
def __init__(self, master, title):
self.frm = Toplevel(master)
self.frm.title(title)
self.frm.focus_set()
self.frm.transient()
root = KMM()
Menüpunkt ich wähle, der Titel des Fensters ist immer derselbe.
Um den Parameter command bei einem Menüpunkt mit einer Funktion plus
übergebenen Parametern belegen kann, verwende ich die lambda-Funktion, wie es jemandem hier im Forum
empfohlen wurde.
Gibt es bessere Lösungen? Mein Ziel ist eine Applikation mit einem Hauptfenster, über dessen Menü man viele
verschiedene weitere Fenster rufen kann. Da diese sich erstmal ähneln, wollte ich hierfür eine einzige
Klasse bauen, die mir die Grundeinstellungen der Fenster bereitstellt.
Viele Grüße und gespannt auf Hilfe wartend...
JR[/code]