3 | ||
Editor: geon
Time: 2011/10/12 18:05:37 GMT+2 |
||
Note: pridavani znacek 2x-3x |
changed: - Na tomto příkladě si ukážeme pár widgetů, udělátek, ze kterých je většinou každé okno vyrobeno. Aplikace v Tkinter jsou doporučovány dělat objektově, přesto tento příklad zůstává u obyčejného řešení. Aplikace v TK - popis ======================== .. image:: py30.png :align: right Zdrojový kod, který bude dále popisován: `aplikaceTk.py`__ .. image:: http://www.geon.wz.cz/pyczwiki/tk/TkinterAplikace.jpg Třída Hodnota ----------------- :: class Hodnota: "Trida promennych, ktere se promiskuitne pouzivaji v nekolika funkcích." text=None vstup=None vek=None jazykPy=None jazykC=None jazykX=None - tato třída slouží jako jakýsi kontejner proměnných, které musí být přístupné ve většině funkcí programu. - jinými slovy, abychom se nemuseli starat o předávání a vracení proměnných funkcím, případně abychom zabránil naudužívání příkazu global xxx. - vytvoříme instanci, kterou pak napříč všemi funkcemi můžeme používat: hodnota=Hodnota() Vše začíná ve start() ----------------------- :: def start(): "start vseho" hlavniOkno=Tk() hlavniOkno.title('Aplikace v Tk') # hlavniOkno.iconbitmap('systemova_ikona.ico') frame=Frame(hlavniOkno) frame.pack() nabidka(frame, hlavniOkno) oblastText(frame) vstupniRadek(frame) mezera(10) vek(frame) linka(frame) jazyk(frame) Vytvoříme hlavniOkno, dáme mu titulek a případně změníme systémovou ikonu. Frame() vytváří uvnitř hlavního okna rámec, plochu, kontejner pro další widgety. Nic moc jiného neumí, než právě obsahovat další widgety. Jako argument přijímá nadřazené okno a vrací sám sebe = objekt frame. Tento frame pak předáváme dalším widgetům při jejich tvorbě, jako jejich rodiče. Metodou pack() určujeme vlastnosti okna na obrazovce. Zde máme frame.pack(fill=BOTH, expand=YES): - fill=BOTH značí, aby při změně velikosti nadřazeného okno (hlavniOkno) se tento (aktualni) ramec (widget) roztahoval do všech dvou směrů - expand=YES je, aby se roztahoval vůbec. Menu = funkce nabidka() : Menu() --------------------------------------------------- .. image:: http://www.geon.wz.cz/pyczwiki/tk/menu.jpg - menuLista je Frame, do kterého budeme vkládat položky menu - menuSoubor obsahuje více položek, každá má label a **command**, což je akce, funkce, která se má provést, když na položku klikneme. - většina položek bude volat stejnou (slepou) funkci hello, některé volají tisk() a 'exit' končí program - nakonec přidáme menuSoubor a další do menuListy a upravíme okno root: 'root.config(menu=menuLista)' Textová oblast = oblastText() : Text() ------------------------------------------ .. image:: http://www.geon.wz.cz/pyczwiki/tk/text.jpg - opět si vyrobíme specielní Frame, který také specielně zapakujeme: 'textRamec.pack(fill=BOTH, expand=YES)' - popis tohoto je výše - Text() je widget, který nám umožňuje do něho psát, mazat, ... - přidáváme k němu posuvník Scrollbar(), který řádně nakonfigurujeme, aby když s ním budeme posunovat, aby se hýbal text nahoru a dolu. Vstupní řádek = vstupniRadek() : Entry() ------------------------------------------- .. image:: http://www.geon.wz.cz/pyczwiki/tk/entry.jpg - jednořádková verze widgetu Text() - vytvoříme si Tkinter proměnnou !StringVar(), kterou následně spojíme s obsahem Entry)): 'vstup=Entry(vstupRamec, width=40, textvariable=hodnota.vstup)'. Je to šikovně řešení, kterí funguje oběma směry: - pokud změníme obsah proměnné hodnota.vstup (např. hodnota.vstup.set("ahoj"), změní se automaticky i text v řádku - pokud změníme text v řádku, jeho obsah získáme pomocí hodnota.vstup.get() Přepínače = vek() : Radiobutton() ------------------------------------- .. image:: http://www.geon.wz.cz/pyczwiki/tk/prepinace.jpg - do framu vekRamec postupně vkládáme jednotlivé Radiobutton() - podobně jako v předchozím případě využijeme interní Tk proměnné !IntVar(), která uchovává čísla, a svážeme jí s každým přepínačem. - hodnota value udává, jaké číslo se zapíše do textvariable, když bude zvolen právě ten který přepínač Zaškrtávátka = jazyk() : Checkbutton() ------------------------------------------ .. image: http://www.geon.wz.cz/pyczwiki/tk/zaskrtavatka.jpg - každé zaškrtávátko představuje logickou hodnotu Ano - Ne - využíváme zde opět proměnné !IntVar(), kterých však v tomto případě musíme vyrobit tolik, kolik máme widgetů (zaškrtávátek). - jedno z nich nastavíme jako default: hodnota.jazykPy.set(1) Oddělovací čára = linka() ---------------------------- - Tkinter nemá takový widget, takže si ho snad jednoduše vyrobíme - vynecháme mezeru nahoře i dole pomocí obyčejného Framu, který má definovanou výšku - vlastní čára je také obyčejný frame, který má relief=RAISED s určitou výškou a pozadím Kontrola proměnných = tisk() --------------------------------- - pro rychlou kontrolu osbahu proměnných je zde funkce tisk(), která je svázána např. s položkou menu Tisk proměnných - tiskne - jednak do shellu/dosu: např. print "hodnota.vstup=", hodnota.vstup.get() - stejný text vkládá i do textové oblasti: hodnota.text.insert(END, t), kde t je řetězec složený ze všech proměnných Závěr --------------- Po spuštění se program dostane do nekonečné smyčky mainloop(), kde nedělá nic jiného než čeká na uživatelovi povely (stisknutí položek menu, psaní textu, zaškrtávání, ...) a podle toho provádí nadefinované akce (funkce). Vytvořeno na základě http://www.wag.caltech.edu/home/rpm/python_course/Lecture_6_files/v3_document.htm . __ aplikaceTk.py
Na tomto příkladě si ukážeme pár widgetů, udělátek, ze kterých je většinou každé okno vyrobeno. Aplikace v Tkinter jsou doporučovány dělat objektově, přesto tento příklad zůstává u obyčejného řešení.
Zdrojový kod, který bude dále popisován: aplikaceTk.py
class Hodnota: "Trida promennych, ktere se promiskuitne pouzivaji v nekolika funkcích." text=None vstup=None vek=None jazykPy=None jazykC=None jazykX=None
def start(): "start vseho" hlavniOkno=Tk() hlavniOkno.title('Aplikace v Tk') # hlavniOkno.iconbitmap('systemova_ikona.ico') frame=Frame(hlavniOkno) frame.pack() nabidka(frame, hlavniOkno) oblastText(frame) vstupniRadek(frame) mezera(10) vek(frame) linka(frame) jazyk(frame)
Vytvoříme hlavniOkno, dáme mu titulek a případně změníme systémovou ikonu.
Frame() vytváří uvnitř hlavního okna rámec, plochu, kontejner pro další widgety. Nic moc jiného neumí, než právě obsahovat další widgety. Jako argument přijímá nadřazené okno a vrací sám sebe = objekt frame. Tento frame pak předáváme dalším widgetům při jejich tvorbě, jako jejich rodiče. Metodou pack() určujeme vlastnosti okna na obrazovce. Zde máme frame.pack(fill=BOTH, expand=YES):
Po spuštění se program dostane do nekonečné smyčky mainloop(), kde nedělá nic jiného než čeká na uživatelovi povely (stisknutí položek menu, psaní textu, zaškrtávání, ...) a podle toho provádí nadefinované akce (funkce).
Vytvořeno na základě http://www.wag.caltech.edu/home/rpm/python_course/Lecture_6_files/v3_document.htm .