Rozmístit grafické objekty v prostředí Python můžeme pomocí správců. My si ukážeme nejznámnější správce PACK a GRID. Správce PACK je sice limitovaný svou funkčností oproto správci GRID ale co se složitosti týče, je jednodužší a funguje tak, že rozmisťuje obejkty do řádků a sloupců. GRID je komplexnější a objekty jsou mísťovány do neviditelné mřížky. Tyto dva správce se nedoporučuje používat na stejném rodičovském okně, protože Tkinter se bude snažit najit cestu jak uspokojit oba správce najednou.
Pack
Používá se zejména pro menší podobjekty, napříkald rámy v oknech, nebo kdy potřebujeme jednoduše objekty rozvrhnout do řady či sloupce.
Dejme tomu, že máme nějaké okno ve kterém je další weidget. Při klasickém nastavení Pack() je okno satické a nemění se při zvětšování okna či zmenšování, mění se jen okno které upravujeme. Přidáním parametru Fill a Expand docílíme stálého vyplnění při úpravě rozměrů okna. Rozdíl můžete vidět níže na obrázku.
pack() | pack(fill=BOTH, expand=1) |
- Fill [vyplnit] říká, že Widget má vyplňovat celý prostor který jen může, tedy prostor od toho prvku ze kterého dědí. Both [obje] nastaveno na 1 (true) znamená, že expandovat má do obou směrů (nahoru. dolů).
- Okolní mezera, nebo-li odsazení se nastavuje parametrem padx=" " a pady=" ", bude kolem prvku zleva i zprava zadaná mezera. Totéž platí pro shora i zdola.
Rozvržení více Widgetů
Nad sebe
Stačí nechat funkci prázdnou pro každý widget, který má být ve sloupci - Pack().
# -*- coding: utf-8 -*- from Tkinter import *
hlavni = Tk()
r = Entry(hlavni, bg="red", fg="white")
r.pack()
g = Entry(hlavni, bg="green", fg="black")
g.pack()
b = Entry(hlavni, bg="blue", fg="white")
b.pack()
mainloop()
Prvek Entry slouží jako vstupní textové pole většinou pro formuláře, kde uživatel musí vyplňovat nějaké údaje. Zde v tomto příkladu jsem je vybarvil aby šlo poznat rozvržení na první pohled.
Vedle sebe
Vedle sebe je naskládáme tak, že je všechny zarovnáme doleva, nezbyde jim nic jiného než se zařadit za sebe v pořadí v jakém jsou vytvořeny. Upravíme funkci Pack takto - Pack(side=LEFT). Výsledek vidíme na obrázku níže.
Můžete zkoušet upravovat parametry u jednotlivých políček a sledovat tak jak se mění jejich poloha...
# -*- coding: utf-8 -*-
from Tkinter import *
hlavni = Tk()
a = Entry(hlavni, bg="red", fg="white")
a.pack(side=LEFT)
b = Entry(hlavni, bg="green", fg="black")
b.pack()
c = Entry(hlavni, bg="blue", fg="white")
c.pack(side=LEFT)
mainloop()
V dalším článku si ukážeme správce GRID, který je o něco lepší a ve většině případech více používaný. Né však vždy se hodí.