Úvod do Tkinter - Okna pro jazyk Python - Postavené na základech 'An Introduction to Tkinter'

Menu

Udělátko menu slouží k implementaci menu (hlavních, rozbalovacích i vyskakovacích).

Kdy Menu použít

Toto udělátko se používá k zobrazování menu všech druhů. Neměli byste mít potřebu vytvářet menu jinými způsoby (například tlačítkem), protože toto udělátko obsahuje nativní kód všude, kde je to možné.

Pojetí

Hlavní menu jsou zobrazovány hned pod titulkovým pruhem okna root i toplevel. K vytvoření hlavního menu vytvořte nejprve novou instanci Menu a pak přidávejte příkazy a další položky menu pomocí metody add.

# -*- coding: utf-8 -*- 
from Tkinter import *
root = Tk()

def hello():
    print "Ahoj!"

# vytvoření hlavního menu
menuLista = Menu(root)
menuLista.add_command(label="Ahoj!", command=hello)
menuLista.add_command(label="Pryč!", command=root.destroy)

# zobrazení menu
root.config(menu=menuLista)
mainloop()

Rozbalovací menu (a další podnabídky) se vytvářejí podobným způsobem. Hlavní rozdíl je, že k rodičovskému menu se musí připojit pomocí add_cascade.

# -*- coding: utf-8 -*- 
from Tkinter import *
root = Tk()

def hello():
    print "Ahoj!"

hlavniMenu = Menu(root)

# vytvořit rozbalovací menu a přidat ho k hlavnímu menu
menuSoubor = Menu(hlavniMenu, tearoff=0)
menuSoubor.add_command(label="Otevřít", command=hello)
menuSoubor.add_command(label="Uložit", command=hello)
menuSoubor.add_separator()
menuSoubor.add_command(label="Pryč", command=root.quit)
hlavniMenu.add_cascade(label="Soubor", menu=menuSoubor)

# další rozbalovací menu
menuUpravy = Menu(hlavniMenu, tearoff=0)
menuUpravy.add_command(label="Vyjmout", command=hello)
menuUpravy.add_command(label="Kopírovat", command=hello)
menuUpravy.add_command(label="Vložit", command=hello)
hlavniMenu.add_cascade(label="Upravit", menu=menuUpravy)

menuNapoveda = Menu(hlavniMenu, tearoff=0)
menuNapoveda.add_command(label="O aplikaci", command=hello)
hlavniMenu.add_cascade(label="Nápověda", menu=menuNapoveda)

# zobrazení menu
root.config(menu=hlavniMenu)

mainloop()

Do třetice - místní nabídka - menu na pravém tlačítku myši - se vytváří podobně, jen se zobrazuje pokaždé nanovo pomocí metodypost:

# -*- coding: utf-8 -*- 
from Tkinter import *
root = Tk()

def hello():
    print "Ahoj!"

# vytvoření menu
menu = Menu(root, tearoff=0)
menu.add_command(label="Zpět", command=hello)
menu.add_command(label="Znovu", command=hello)

# vytvoření plochy
frame = Frame(root, width=300, height=200)
frame.pack()

def popup(event):
    menu.post(event.x_root, event.y_root)

# propojení plochy s menu
frame.bind("<Button-3>", popup)

# menu nezobrazíme
# root.config(menu=menu)

mainloop()

Použijte volání postcommand ke změně (nebo dokonce vytvoření) menu pokaždé, když se zobrazuje:

# -*- coding: utf-8 -*- 
from Tkinter import *

counter = 0
root = Tk()

def update():
    global counter
    counter = counter + 1
    menu.entryconfig(0, label=str(counter))

menubar = Menu(root)
menu = Menu(menubar, tearoff=0, postcommand=update)
menu.add_command(label=str(counter))
menu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="Test", menu=menu)
root.config(menu=menubar)

mainloop()

Referenční příručka

Menu(master=None, **options) (class) [#]

Menu.

__init__(master=None, **options) [#]

Vytvoří menu..

master
Rodičovské udělátko.
**options
Parametry udělátka. Popis parametrů najdete v metodě config.
activate(index) [#]

Metoda activate.

index
add(type, **options) [#]

Přidá, připojí, položku daného typu k menu.

type
Jakou položku přidat. Může být "command", "cascade" (podmenu), "checkbutton", "radiobutton" nebo "separator".
**options
Parametry menu.
activebackground=
activeforeground=
accelerator=
background=
bitmap=
columnbreak=
command=
font=
foreground=
hidemargin=
image=
indicatoron=
label=
menu=
offvalue=
onvalue=
selectcolor=
selectimage=
state=
underline=
value=
variable=
add_cascade(**options) [#]

Přidá podmenu. Viz add.

**options
add_checkbutton(**options) [#]

Přidá zaškrtávací tlačítko. Viz add.

**options
add_command(**options) [#]

Přídá příkaz. Viz add.

**options
add_radiobutton(**options) [#]

Přidá radiobutton. Viz add.

**options
add_separator(**options) [#]

Přidá separator. Viz add.

**options
config(**options) [#]

Mění jeden nebo více parametrů udělátka. Metoda vrací aktuální nastavení, nepředáte-li žádný parametr.

**options
Parametry.
activebackground=
Standardní nastavení je 'SystemHighlight'. (databázové jméno je activeBackground, třída je Foreground)
activeborderwidth=
Standardní nastavení je 0. (activeBorderWidth/BorderWidth)
activeforeground=
Standardní nastavení je 'SystemHighlightText'. (activeForeground/Background)
background=
Standardní nastavení je 'SystemMenu'. (background/Background)
bg=
Stejné jako background.
borderwidth=
Standardní nastavení je 0. (borderWidth/BorderWidth)
bd=
Stejné jako borderwidth.
cursor=
Standardní nastavení je 'arrow'. (cursor/Cursor)
disabledforeground=
Standardní nastavení je 'SystemDisabledText'. (disabledForeground/DisabledForeground)
font=
Standardní nastavení je 'MS Sans Serif 8'. (font/Font)
foreground=
Standardní nastavení je 'SystemMenuText'. (foreground/Foreground)
fg=
Stejné jako foreground.
postcommand=
Bez defaultní hodnoty. (postCommand/Command)
relief=
Standardní nastavení je 'flat'. (relief/Relief)
selectcolor=
Standardní nastavení je 'SystemMenuText'. (selectColor/Background)
takefocus=
Standardní nastavení je 0. (takeFocus/TakeFocus)
tearoff=
Standardní nastavení je 1. (tearOff/TearOff)
tearoffcommand=
Bez defaultní hodnoty. (tearOffCommand/TearOffCommand)
title=
Bez defaultní hodnoty. (title/Title)
type=
Standardní nastavení je 'normal'. (type/Type)
delete(index1, index2=None) [#]

Maže jednu nebo více položek menu.

index1
První položka ke smazání.
index2
Poslední položka ke smazání. Je-li vynecháno, maže se jen jedna.
entrycget(index, option) [#]

Metoda entrycget.

index
option
entryconfig(index, **options) [#]

Přenastavuje danou položku menu. Mění se jen dané položky, zbytek se nemění. Více viz add.

index
**options
entryconfigure(index, **options) [#]

Stejné jako entryconfig.

index(index) [#]

Převádí index jakéhokoliv typu na celočíselný index. index.

index
Vrací:
Celočíselný index.
insert(index, itemType, **options) [#]

Vkládá položku daného typu do menu. Je to podobné jako add, ale vkládá položky.

index
itemType
**options
insert_cascade(index, **options) [#]

Vkládá submenu.

index
**options
insert_checkbutton(index, **options) [#]

Vkládá checkbutton.

index
**options
insert_command(index, **options) [#]

Vkládá command.

index
**options
insert_radiobutton(index, **options) [#]

Vkládá radiobutton.

index
**options
insert_separator(index, **options) [#]

Vkládá separator

index
**options
invoke(index) [#]

Metoda invoke.

index
post(x, y) [#]

Zobrazuje menu na dané pozici. Pozice by měla být udána v pixelech, relativně k rodičovskému oknu.

x
Pozice menu.
y
Pozice menu.
type(index) [#]

Vrací typ dané položky menu..

index
Index.
Vrací:
Typ položky..
unpost() [#]

Maže zobrazené menu.

yposition(index) [#]

Vrací vertikální offset dané položky. Používá se, aby byla daná položka pod myší pokaždé, když je menu zobrazeno.

index
Index.
Vrací:
Svislý offset v souřadnicích okna..

Přeložil a upravil - Pavel Kosina - Copyright © 2007 TkinterCZ - GNU Free Documentation License 1.2