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

Správce rozmístnění Pack

Správce rozmístnění Pack pakuje udělátka do řádků a sloupců. S ním můžete používat volby jako fill, expand a side, pomocí kterých tohoto správce řídíte.

Tento správce obsluhuje všechna udělátka, která se skládají uvnitř stejného rodičovského. Algoritmus skládání je jednoduchý, nicméně se těžko slovy popisuje. Představte si list nějakého elastického látky s velmi malou čtvercovou dírou uprostřed. U každého udělátka, v pořadí jak se skládají, tento správce rozmístění zvětší dostatečně díru, aby se tam udělátko vešlo a pak ho položí k zadané vnitřní hraně (defaultní je horní hrana). Tento proces se pak opakuje pro všechna udělátka. Když jsou všechna udělátka umístěna v díře, správce spočítá orámování pro všechna udělátka, učiní rodičovské udělátko dostatečně velkým, aby se do něj všechna udělátka vešla a vše postoupí rodiči.

Kdy použít Správce Pack

Správce Pack je v porovnání se správcem Grid trochu limitovaný, ale snadněji se používá v několika běžných situacích:

  1. Udělátko uvnitř rámečku, nebo nějakého udělátka typu kontejner, které má vyplnit celý rám
  2. Umístění několika udělátek v řadě nad sebou
  3. Umístění několika udělátek vedle sebe

Potřebujete-li vytvořit sofistikovanější design, budete muset obvykle seskupovat skupiny udělátek do dalších Framů. Také můžete v těchto případech používat správce grid.

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í

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

Běžná situace: potřebujete pouze umístit udělátko do kontejnerového udělátka tak, aby vyplnilo celý jeho obsah. Zde je jednoduchý příklad: Rozbalený seznam (listbox) umístěn v hlavním okně.:

from Tkinter import *

hlavni = Tk()

listbox = Listbox(hlavni)
listbox.pack()

for i in range(20):
    listbox.insert(END, str(i))

mainloop()

Standardně je listbox velký asi tak na zobrazení 10-ti položek. Tento jich však obsahuje dvakrát více. Pokud se ale pokusí uživatel je zobrazit pomocí zvětšení okna, Tkinter přidá výplň kolem listboxu:

Přidejte parametry fill a expand, chcete-li docílit, aby udělátko vždy, i při zvětšování okna, vyplňovalo celý rodičovský element:

from Tkinter import *

hlavni = Tk()

listbox = Listbox(hlavni)
listbox.pack(fill=BOTH, expand=1)

for i in range(20):
    listbox.insert(END, str(i))

mainloop()

Parametr fill říká správci, že udělátko chce vyplnit celý prostor, který má k dispozici. HOdnota určuje jak prostor vyplňovat: BOTH značí, že udělátko chce expandovat jak vodorovně tak svisle; X značí, že se chce expandovat jen horizontálně a Y jen svisle.

Parametr expand říká správci, aby přiděloval dodatečný prostor udělátku. Pokud se rodičovský widget zvětší, nadbytečný prostor se rozdělí mezi všechny udělátka, které mají parametr expand nastaven na nenulovou hodnotu.

Umístnění několika udělátek nad sebou

Použijte pack bez jakéhokoliv parametru, chcete-li umístit několik udělátek do jednoho sloupce:

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

hlavni = Tk()

w = Label(hlavni, text=u"Červená", bg="red", fg="white")
w.pack()
w = Label(hlavni, text=u"Zelená", bg="green", fg="black")
w.pack()
w = Label(hlavni, text=u"Modrá", bg="blue", fg="white")
w.pack()

mainloop()

Použijte parametr fill=X chcete-li mít všechna udělátka stejně široká jako rodiče.

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

hlavni = Tk()

w = Label(hlavni, text=u"Červená", bg="red", fg="white")
w.pack(fill=X)
w = Label(hlavni, text=u"Zelená", bg="green", fg="black")
w.pack(fill=X)
w = Label(hlavni, text=u"Modrá", bg="blue", fg="white")
w.pack(fill=X)

mainloop()

Umístění několika udělátek vedle sebe

Používejte parametr side, chcete-li umístit udělátka vedle sebe. Chcete-li navíc, aby byly udělátka stejně vysoká jako rodič, použijte také parametr fill=Y :

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

hlavni = Tk()

w = Label(hlavni, text=u"Červená", bg="red", fg="white")
w.pack(side=LEFT)
w = Label(hlavni, text=u"Zelená", bg="green", fg="black")
w.pack(side=LEFT)
w = Label(hlavni, text=u"Modrá", bg="blue", fg="white")
w.pack(side=LEFT)

mainloop()

Referenční příručka

Pack (třída) [#]

Správce rozmístění Pack. Toto je implementační třída; všechno níže uvedené metody jsou dostupné pro všechny widgety.

pack(**parametry) [#]

Složí udělátko tak, jak je určeno parametry.

**parametry
Parametry rozmístění.
anchor=
Kam umístit udělátko uvnitř rodičovského udělátka. Standard je CENTER.
expand=
Určuje, jestli má udělátko vyplňovat nadbytečný prostor v rodiči. Pokud se rovná nepravdě (default), udělátko se nebude rozšiřovat.
fill=
Určuje, jestli má udělátko okupovat veškerý prostor poskytnutý mu rodičem. Pokud je NONE (default), udělátko si zachovává svoji původní velikost. Pokud je X (vyplnit vodorovně), Y (vyplnit svisle) nebo BOTH, vyplní daný prostor v patřičném směru.
Chcete-li, aby udělátko zcela a vždy vyplňovalo prostor rodiče, nastavte fill=BOTH a expand na nějakou nenulovou hodnotu.
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=
Vnitřní výplň. Standard je 0.
ipady=
Vnitřní výplň. Standard je 0.
padx=
Vnější výplň. Standard je 0.
pady=
Vnější výplň. Standard je 0.
side=
Určuje, u které strany se má udělátko zapakovat. Použijte TOP, chcete-li pakovat svisle. Chcete-li pakovat vodorovně, použijte LEFT. Můžete také pakovat ke spodní nebo pravé straně (BOTTOM a RIGHT). Strany můžete klidně kombinovat, ale nemusíte vždy dostat to, co očekáváte. Ačkoliv použitím Rámečků můžete vytvářet vcelku komplikovaná rozložení udělátek, možná dáte u netriviálních layoutů přednost správci rozmístění grid.
pack_configure(**options) [#]

Stejné jako pack.

pack_forget() [#]

Vyjme udělátko z aktuálního správce - udělátko není zničeno - může se znovu zobrazit pomocí pack nebo jiného správce.

pack_info() [#]

Vrací slovník obsahující aktuální parametry správce.

Vrací:
Slovník obsahují aktuální parametry správce pack.
pack_propagate(příznak) [#]

(Metoda správce) Řídí propagaci geometrie. Pokud je povoleno, změní se velikost rodiče tak, aby se do něj vešly všichni potomci - udělátka.

Tato metoda by se měla volat na rodičovské udělátko, ne na jednotlivé potomky - udělátka.

pack_slaves() [#]

(Metoda správce) Vrací seznam všech potomků ("slave") spravovaných tímto správcem u tohoto rodiče.

Tato metoda by se měla volat na rodičovské udělátko, ne na jednotlivé potomky - udělátka.

Vrací:
Seznam potomků udělátka.

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