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

Správce rozmístnění Grid

Správce rozmístnění Grid (česky mřížka) vkládá udělátka do pomyslné tabulky (mřížky). Rodičovské udělátko je rozděleno na řádky a sloupce a každá z buněk této tabulky může obsahovat udělátko.

Kdy používat správce Grid

Grid je nejflexibilnější ze správců v Tkinter. Pokud se vám nechce učit jak a kdy používat všechny tři správce, měli byste se určitě naučit minimálně tento.

Správce Grid je obzvláště výhodný, když navrhujete dialogová okna. Pokud jste dnes zvyklí na správce Pack, budete asi překvapení, jak snadno to lze zařídit s Gridem. Namísto používání mnoha Rámečků, aby pakování fungovalo jak má, můžete v nejjednodušším případě nalít všechny udělátka do jediného kontejneru a použít správce grid na umístnění, tam kam chcete. (Já obvykle používám dva kontejnery - jeden na dialogové tělo a jeden na tlačítka na spodku okna.)

Podívejte se na následující příklad:

Vytvoření takového layoutu pomocí správce pack je možné, ale vyžaduje vytvoření několika extra udělátek Frame a mnoho starostí, aby věci vypadaly tak jak mají. Když místo něho použijete správce grid, budete volat pouze jednu metodu na každé udělátko a všechno bude, jak má být. V další sekci uvidíte, jak na to prakticky.

Poznámka: Nikdy nemíchejte grid a pack ve stejném rodičovském okně. Tkinter po zbytek vašeho života bude hledat řešení, které uspokojí oba dva správce. Namísto čekání aplikaci raději shoďte a znovu se podívejte na svůj kód. Běžná chyba je použití chybného rodiče pro některá udělátka.

Pojetí

Používá správce grid je snadné. Jednoduše vytvořte udělátka a použijte metodu grid a v ní řekněte správci, do kterého řádku a sloupce je má dát. Nemusíte předem určovat, jak velká mřížka má být. Správce si sám určí velikost podle udělátek v ní.

Jednoduchý příklad

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

rodic=Tk() 
rodic.option_add('*Font', 'Verdana 10')

Label(rodic, text=u"První").grid(row=0)
Label(rodic, text=u"Druhý").grid(row=1)

e1 = Entry(rodic)
e2 = Entry(rodic)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

mainloop()

Pokud není sloupec zadán, je standardně 0.

Prázdné řádky i sloupce jsou ignorovány. Výsledek by byl stejný, kdybyste umístili udělátka do řady 10 a 20.

Použití parametru sticky

Všimněte se, že udělátka jsou v buňkách mřížky centrována na střed. TOto chování můžete změnit, použijete-li parametr sticky, který může nabývat jedné nebo více hodnot z: N, S, E, W. Zarovnání doleva je tedy W (west - západ). Může být i více hodnot, např. sticky=N+W.

Label(rodic, text=u"První").grid(row=0, sticky=W)
Label(rodic, text=u"Druhý").grid(row=1, sticky=W)

e1 = Entry(rodic)
e2 = Entry(rodic)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

Slučování řádků a sloupců

Udělátka mohou také překlenovat (span) několik buněk. Parametr columnspan se používá, pokud chceme, aby udělátko přesahovalo několik buněk a rowspan podobně, několik řádků. Následující kód vám vyrobí výše zobrazený layout::

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

rodic=Tk() 
rodic.option_add('*Font', 'Arial 10')

stitek1=Label(text=u"Váha")
stitek1.grid(sticky=E)
stitek2=Label(text=u"Výška")
stitek2.grid(sticky=E)

vstup1=Entry()
vstup1.grid(row=0, column=1)
vstup2=Entry()
vstup2.grid(row=1, column=1)

zaskrtavatko=Checkbutton(text=u"Zachovat poměr")
zaskrtavatko.grid(columnspan=2, sticky=W)

obrazek=PhotoImage(file="avatarGeon.gif")
image = Label(image=obrazek) 
image.grid(row=0, column=2, columnspan=2, rowspan=2, sticky=W+E+N+S, padx=5, pady=5)

button1=Button(text=u"Zvětšit")
button1.grid(row=2, column=2)
button2=Button(text=u"Zmenšit")
button2.grid(row=2, column=3)

mainloop()

Pár poznámek k tomuto příkladu:

  1. U štítků není definována žádná pozice (buňka). V těchto případech se defaultně bere sloupec=0 a řádek=první následující prázdný řádek v mřížce.
  2. Udělátka Entry jsou pozicovány normálně, ale zaškrtávátko je umístěno na nové prázdné řádce (v tomto případě řádka 2) a nakonfigurován, aby překlenul 2 sloupce. Ve výsledku tedy bude stejně široké, jako štítek se vstupem dohromady. Obrázek překlenuje 2 řádky i sloupce současně.
  3. Tlačítka jsou umístěny v samostatných buňkách.

Automatické rozšiřování udělátka

Uvedenu podobný příklad jako u správce Pack:
# -*- coding: utf-8 -*-
from Tkinter import *

hlavni = Tk()

w = Label(hlavni, text=u"Červená", bg="red", fg="white")
w.grid(sticky=W+E)
w = Label(hlavni, text=u"Zelená", bg="green", fg="black")
w.grid(sticky=W+E)
w = Label(hlavni, text=u"Modrá", bg="blue", fg="white")
w.grid(sticky=W+E)

hlavni.grid_columnconfigure(0,weight=1)
mainloop()

Referenční příručka

Grid (třída) [#]

Správce rozmístnění Grid. Toto je implementační třída. Grid geometry manager; všechny níže popsané metod jsou dostupné u všech udělátek.

grid(**parametry) [#]

Umístí udělátko do mřížky (grid) podle parametrů.

**parametry
Parametry rozmístnění.
column=
Vloží udělátko do tohoto sloupce. Číslování sloupců začíná na 0. Pokud je vynecháno, je 0.
columnspan=
Pokud je uvedeno, indikuje, že buňka udělátka má přesahovat do několika sloupců. Standard je 1.
in=
Zapakuj toto udělátko uvnitř daného widgetu. UDělátko se dá packovat jen uvnitř svého rodiče nebo potomka rodiče. Tento parametr se většinou vynechává a v tom případě se udělátko zapakuje uvnitř svého rodiče. Všimněte si, že in je v Pythonu klíčové slovo. Abyste ho mohli použít jako pojmenovaný parametr, přidejte podtržítko (in_).
ipadx=
Dobrovolná vodorovná vnitřní výplň. Funguje jako padx, ale výplň je přidána dovnitř hranic udělátka. Standard je 0.
ipady=
Dobrovolná svislá vnitřní výplň. Funguje jako pady, ale výplň je přidána dovnitř hranic udělátka. Standard je 0.
padx=
Dobrovolná vodorovná výplň, která zaplní prostor kolem buňky udělátka. Standard je 0.
pady=
Dobrovolná svislá výplň, která zaplní prostor kolem buňky udělátka. Standard je 0.
row=
Vloží udělátko do tohoto řádku. Čísla řádků začínají na 0. Pokud je vynecháno, vezme se první další prázdný řádek v mřížce.
rowspan=
Pokud je uvedeno, indikuje, že buňka udělátka má přesahovat do několika řádek. Standard je 1.
sticky=
Určuje, jak se bude udělátko rozšiřovat, když bude buňka větší než udělátko samo. Může nabývat hodnot S, N, E a W nebo NW, NE, SW a SE.

Například W (west) znamená, že udělátko bude zarovnáno k levému okraji buňky. W+E znamená, že udělátko bude roztahování tak, aby vždy vyplnilo celou buňku. W+E+N+S znamená, že udělátko bude roztahováno v obou směrech. Standard je udělátko vycentrováno v buňce bez automatického rozšiřování.

grid_bbox(column=None, row=None, col2=None, row2=None) [#]

Metoda grid_bbox.

column
row
col2
row2
grid_columnconfigure(index, **options) [#]

Nastavení parametrů pro sloupec buněk.

Chcete-li použít toto na určitou buňku, musíte tuto metodu volat na jejím rodiči.

index
Pořadí sloupce.
**options
Parametry sloupce.
minsize=
Nastaví minimální velikost sloupce. Pokud však bude sloupec zcela prázdný, nezobrazí se ani když bude tento parametr nastaven.
pad=
Výplň, která se přidá k největšímu udělátku v daném sloupci, když se nastavuje šířka celého sloupce.
weight=
Relativní váha, která se používá k rozdělování nadbytečného prostoru mezi sloupci. Sloupec s váhou 2 se bude zvětšovat 2x rychleji než sloupec s váhou 1. Standard je 0, což značí, že sloupec se zvětšovat nebude vůbec.
grid_configure(**options) [#]

Stejné jako grid.

grid_forget() [#]

Odebrat toto udělátko správci grid. Udělátko není zničeno, může být tak znovu zobrazeno správcem grid nebo jakýmkoliv jiným.

grid_info() [#]

Vrací slovník obsahující současné parametry buněk u buňky, kterou okupuje aktuální udělátko.

Vrací:
Slovník obsahující parametry správce grid. options.
grid_location(x, y) [#]

Vrací buňku mřížky, která je pod nebo nejblíže zadanému pixelu.

x
y
Vrací:
Dvojici, obsahující číslo řádku a sloupce.
grid_propagate(flag) [#]

Povoluje nebo zakazuje propagaci rozmístnění. Pokud je uvolněno, což je standard, správce Grid se vždy snaží změnit velikost udělátka, kdykoliv se změní velikost potomka.

flag
Na povolení propagace - True.
grid_remove() [#]

Odebrat toto udělátko ze správce grid. Udělátko nebude zničeno, může být znovu zobrazeno správcem grid nebo jakýmkoliv jiným.

grid_rowconfigure(index, **options) [#]

Nastavení parametrů pro řádku buněk.

Chcete-li použít toto na určitou buňku, musíte tuto metodu volat na jejím rodiči.

index
Pořadí řádky.
**options
Parametry řádky.
minsize=
Nastaví minimální velikost řádky. Pokud však bude řádka zcela prázdná, nezobrazí se ani když bude tento parametr nastaven.
pad=
Výplň, která se přidá k největšímu udělátku v daném řádku, když se nastavuje šířka celého řádku.
weight=
Relativní váha, která se používá k rozdělování nadbytečného prostoru mezi řádky. Řádek s váhou 2 se bude zvětšovat 2x rychleji než řádek s váhou 1. Standard je 0, což značí, že řádek se zvětšovat nebude vůbec.
grid_size() [#]

Vrací současnou velikost mřížky správce rozmístnění, který je připojen k tomuto udělátku. Velikost je definována jako indexy prvního prázdného sloupce a první prázdné řádky (v tomto pořadí).

Vrací:
Dvojici, obsahující počet sloupců a řádků.
grid_slaves(row=None, column=None) [#]

Vrací seznam "potomků" spravovaných tímto udělátkem. Udělátka jsou vrácena ve formě referencí.

Vrací:
Seznam udělátek.

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