tk.Menu
tk.Menu erzeugen
menu = tk.Menu(parent, Optionen)
window['menu'] = menu
Die folgende Tabelle enthält die Menüoptionen zum Befehl tk.Menu()
Optionsname | Beschreibung |
---|---|
allgemeine tk-Widget-Optionen | |
activebackground | Hintergrundfarbe für aktive Elemente |
activeborderwidth | Rahmenbreite für aktive Elemente |
activeforeground | Vordergrundfarbe für aktive Elemente |
activerelief | Rahmenart für aktive Elemente, Siehe Rahmenoptionen |
background, bg | Normale Hintergrundfarbe |
borderwidth, bd | Rahmenbreite |
disabledforeground | Vordergrundfarbe im state disabled |
spezielle tk.Menu-Optionen | |
postcommand | Funktion, die aufgerufen wird, wenn sich das Menu öffnet |
selectcolor | Indikatorfarbe für Check- oder Radiobuttonmenus |
tearoff | (Boolean) wenn tk.YES , dann enthält das Menu eine
Tearoff-Zeile, so dass man das Menu abreißen kann. (default) |
tearoffcommand | Funktion, wird aufgerufen, wenn das Menü abgerissen wird |
title | Titel des Fensters für ein eigenständiges, abgerissenes Menufenster |
type | menubar , tearoff oder normal ,
nur interner Gebrauch |
tk.Menu kennt außerdem die Standardoptionen: cursor, font, foreground (fg), relief und takefocus
Menuitems erzeugen
menu = tk.Menu(parent, Optionen)
menu.add('command', label='Bearbeiten')
window['menu'] = menu
Die folgende Tabelle enthält Menüitemoptionen für den Befehl menu.add(…)
, der
weiter unten vorgestellt wird
Optionsname | Beschreibung |
---|---|
accelerator | Zeigt einen Accelerator an, beispielsweise accelerator='^C'.
Accelerator muss noch per bind(…) hinzugefügt werden |
activebackground | Hintergrundfarbei im Zustand tk.ACTIVE |
activeforeground | Vordergrundfarbe im Zustand tk.ACTIVE |
background | Hintergrundfarbe, nicht aktiviert |
bitmap | Anzeige einer Bitmap |
columnbreak | columnbreak==0 : Eintrag erfolgt unterhalb des
letzten Eintrags. Ist columnbreak==1 , dann erscheint der Eintrag in
einer neuen Spalte. |
command | Callback |
compound | Position der Grafik, wenn Grafik und Text gleichzeitig erscheint:
tk.BOTTOM , tk.CENTER , tk.LEFT ,
tk.NONE , tk.RIGHT , oder tk.TOP |
font | ausgewählter Font |
foreground | Vordergrundfarbe, wenn das Item nicht ausgewählt ist |
hidemargin | hidemargin=True : kein Rand um Item |
image | Bild für dieses Item |
indicatoron | Für Check- und Radiobuttons: (Boolean) True :
Indicator wird angezeigt |
label | Text des Items |
menu | Submenü |
offvalue | Checkbuttons: Wert, wenn er ausgeschaltet ist |
onvalue | Checkbuttons: Wert, wenn er eingeschaltet ist |
selectcolor | Auswahlfarbe für Check- und Radiobuttons, rot ist default |
selectimage | Radio- oder Checkbutton: Image für die Anzeige bei Auswahl |
state | tk.DISABLED (ausgegraut, deaktiviert),
tk.ACTIVE : Aktiv, Maus über dem Eintrag,
tk.NORMAL : Normale Ansicht |
underline | Index des unterstrichenen Buchstabens |
value | Radiobutton: Dieser Wert wird in der Variablen gespeichert. Ist dieser Wert nicht angegeben, dann wird der Label-Text genommen |
variable | Check- und Radiobutton: Kontrollvariable |
Das folgende Programm stellt eine Menüleiste und einige Einträge in dieser Menüleiste vor.
Das fileMenu
enthält das exit-Menü, mit dem das Programm beendet wird:
import tkinter as tk
from tkinter import ttk
class A(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('400x200')
self._createWidgets()
def _createWidgets(self):
menubar = tk.Menu(self)
# Untermenu: Dateimenu
fileMenu = tk.Menu(menubar, tearoff=tk.NO,
activebackground='black',
activeforeground='white')
fileMenu.add('command', label='Öffnen')
fileMenu.add('command', label='Schließen')
fileMenu.add('separator')
fileMenu.add('command', label='exit', command=self.destroy)
# Dateimenu hinzufügen
menubar.add('cascade', label='Datei', menu=fileMenu)
# weitere Menus
menubar.add('command', label='Bearbeiten')
menubar.add('command', label='Werkzeuge')
# Menubar im Fenster eintragen
self['menu'] = menubar
if __name__ == '__main__':
window = A()
window.mainloop()
Menü-Methoden
miOption
sind die Menüitemoptionen aus obiger Tabelle.
Indextyp:
- Nummer: ein Index, wobei 0 den Anfang darstellt
- @Nummer: Eine y-Koordinate, referenziert das Item, das der Koordinate am nächsten ist
- ein Pattern mit folgenden Zeichen:
*
: beliebiger Text,?
: ein beliebiges Zeichen,[A-z]
: eine Gruppe von Zeichen und\x
: dem Zeichen 'x' 'none'
: kein Index'active'
: das aktivierte Element'end'
,'last'
: (synonym) das letzte Element
Funktion | Parameter | Rückgabewert | Beschreibung |
---|---|---|---|
m.activate(index) | index : Itemindex | - | Setzt
den Menüeintrag mit gegebenem Index auf aktiv. Der aktive Eintrag kann mit
m.index('active') abgefragt werden |
m.add(mType, miOption, …) | mType : 'cascade' ,
'checkbutton' , 'command' , 'radiobutton'
oder 'separator' , miOption, … : Key-Value-Paare |
- | Fügt dem Menü ein neues Element hinzu |
m.add_cascade(miOption, …) | miOption
aus obiger Tabelle, Key-Value-Paare | - | Fügt das Element ein |
m.add_checkbutton(miOption, …) | |||
m.add_checkbutton(miOption, …) | |||
m.add_command(miOption, …) | |||
m.add_radiobutton(miOption, …) | |||
m.add_separator() | - | - | Fügt einen Separator ein |
m.cget(Option) | Siehe allgemeine Konfigurationsmethoden | ||
m.clone(…) | Nur interner Gebrauch | ||
m.configure(Option…) | Siehe allgemeine Konfigurationsmethoden | ||
m.delete(index1, index2=index1) | index1 , index2 :
Itemindex | - | Löscht die Menüitems |
m.entrycget(index, miOption) | index : Itemindex
miOption aus obiger Tabelle | Wert der Menüitemoption | Fragt den
miOption -Wert des Items an der Stelle index ab |
m.entryconfigure(index, miOption, …) | index :
Itemindex, miOption aus obiger Tabelle | - | Ändert den miOption -Wert des Items an der Stelle
index |
m.index(index) | index : Itemindex | Zahl | Gibt einen numerischen Index zum index (als Indextyp) zurück |
m.insert(index, mType, miOption, …) | index : Itemindex,
sonst wie m.add(…) | - | Fügt einen neuen Menüeintrag vor index ein. Verhält sich
sonst wie m.add(…) |
m.insert_cascade(…) | siehe
m.insert(…) und m.add_cascade(…) | ||
m.insert_checkbutton(…) | siehe
m.insert(…) und m.add_checkbutton(…) | ||
m.insert_command(…) | siehe
m.insert(…) und m.add_command(…) | ||
m.insert_radiobutton(…) | siehe
m.insert(…) und m.add_radiobutton(…) | ||
m.insert_separator(…) | siehe
m.insert(…) und m.add_separator(…) | ||
m.invoke(index) | index : Itemindex | - | Callback des Menüeintrags an der Stelle index wird aufgerufen |
m.post(x, y) | x, y: Position | - | Zeigt das Menü an der Position
(x, y) (Bildschirmkoordinaten!) an. Führt gegebenenfalls die Callback aus, die unter
postcommand in den Menüoptionen angegeben wurde |
m.postcascade(index) | Noch nicht unterstützt? | ||
m.type(index) | index : Itemindex |
Itemtyp (tk.CASCADE , tk.CHECKBUTTON , tk.COMMAND ,
tk.RADIOBUTTON , tk.SEPARATOR oder 'tearoff' ) |
Gibt den Itemtyp des Menüeintrags am angegebenen Index zurück |
m.unpost() | - | - | Klappt die mit post(…)
oder per Maus geöffneten Untermenüs wieder zu. Funktioniert nicht unter
MacOS und Windows |
m.xposition(index) | index : Itemindex | Pixelabstand | Horizontaler Pixelabstand des Menüeintrags relativ zum Menüfenster |
m.yposition(index) | index : Itemindex | Pixelabstand | Vertikaler Pixelabstand des Menüeintrags relativ zum Menüfenster |
Das folgende Programm stellt Menüitems mit ihren Callbacks vor. Dabei werden Radiobuttons und Checkbuttons ebenfalls als Einträge benutzt:
import tkinter as tk
from tkinter import ttk
class A(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('400x200')
self._createWidgets()
def _createWidgets(self):
menubar = tk.Menu(self)
# Untermenu: Dateimenu
fileMenu = tk.Menu(menubar, tearoff=tk.NO,
activebackground='black',
activeforeground='white')
fileMenu.add_command(label='Öffnen',
command=lambda x='open':
self._onMenuClick(x))
fileMenu.add_command(label='Schließen',
command=lambda x='close':
self._onMenuClick(x))
fileMenu.add_separator()
fileMenu.add_command(label='exit', command=self.destroy)
# Untermenu: RadioMenu
self.intVar = tk.IntVar(value=2)
radioMenu = tk.Menu(menubar, tearoff=tk.NO,
activebackground='white',
activeforeground='black')
radioMenu.add_radiobutton(label='Apfel', variable=self.intVar,
value=1, command=self._onRadioClick)
radioMenu.add_radiobutton(label='Birne', variable=self.intVar,
value=2, command=self._onRadioClick)
radioMenu.insert_radiobutton(1, label='egal', variable=self.intVar,
value=3, command=self._onRadioClick)
# Untermenu: CheckMenu
self.c1Var = tk.IntVar(value=0)
checkMenu = tk.Menu(menubar, tearoff=tk.NO)
checkMenu.add_checkbutton(label='aufgeräumt', variable=self.c1Var,
offvalue=0, onvalue=1,
command=self._onCheck1Click)
self.c2Var = tk.IntVar(value=1)
checkMenu.add_checkbutton(label='Bad geputzt', variable=self.c2Var,
offvalue=0, onvalue=1,
command=self._onCheck2Click)
# Untermenüs hinzufügen
menubar.add_cascade(label='Datei', menu=fileMenu)
menubar.add_cascade(label='RadioMenu', menu=radioMenu)
menubar.add_cascade(label='Checkliste', menu=checkMenu)
# Menubar im Fenster eintragen
self['menu'] = menubar
def _onMenuClick(self, value):
print('Dateimenü geklickt:', value)
def _onRadioClick(self):
print('Radiobutton geklickt:', self.intVar.get())
def _onCheck1Click(self):
print('Checkbutton 1 geklickt:', self.c1Var.get())
def _onCheck2Click(self):
print('Checkbutton 2 geklickt:', self.c2Var.get())
if __name__ == '__main__':
window = A()
window.mainloop()
ttk.Menubutton
ttk.Menubutton erzeugen
mb = ttk.Menubutton(parent, Optionen)
Optionsname | Beschreibung |
---|---|
spezielle ttk.Menubutton-Optionen | |
direction | Angabe, wo das Menü positioniert werden soll: 'above' ,
'below' (default), 'left' , 'right' oder
'flush' (direkt über dem Knopf). |
menu | Das tk.Menu, das angezeigt werden soll, wenn der Knopf betätigt wird. Das Menü sollte den Knopf als parent haben. |
ttk.Menubutton kennt außerdem die Standardoptionen: class_, compound, cursor, image, state, style, takefocus, text, textvariable, underline und width
Es werden nur die Standardmethoden unterstützt:
- Konfigurationsmethoden:
cget(…)
undconfigure(…)
- Sonstige Methoden:
identify(…)
,instate(…)
undstate(…)
ttk.Menubutton kennt den Style 'Toolbutton'
, wie unter
ttk.Button#Toolbutton beschrieben.
Das folgende Programm verknüpft einen Menübutton mit einem Menü. Da das Menü den Menübutton als Parent haben soll, muss man erst den Menübutton und dann erst das Menü erstellen. Das Menü wird im Anschluss dem Button hinzugefügt.
import tkinter as tk
from tkinter import ttk
class A(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('400x200')
self._createWidgets()
def _createWidgets(self):
f = ttk.Frame(self, relief=tk.FLAT)
f.pack(side=tk.TOP, fill=tk.X, expand=tk.NO, padx=2, pady=2)
mb1 = ttk.Menubutton(f, text='Mein Menü', direction='flush')
mb1.pack(side=tk.LEFT)
# Menu erstellen, parent ist der Menubutton
menu = tk.Menu(mb1, tearoff=tk.NO,
activebackground='black',
activeforeground='white')
menu.add_command(label='Öffnen',
command=lambda x='open':self._onMenuClick(x))
menu.add_command(label='Schließen',
command=lambda x='close':self._onMenuClick(x))
menu.add_separator()
menu.add_command(label='Exit', command=self.destroy)
# Menu dem Menubutton hinzufügen
mb1['menu'] = menubar
def _onMenuClick(self, value):
print('Dateimenü geklickt:', value)
if __name__ == '__main__':
window = A()
window.mainloop()