Python - 20. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Python - 20. lekcePython - 20. lekce

 

Python - 20. lekce

Google       Google       22. 5. 2006       22 680×

Tlačítko vedle tlačítka. Navazuji na přerušený seriál o programování oken v Tkinter, které bylo v lekcích 11 a 12. V těchto dvou lekcích jsme se seznámili se základy okenního programování. Vysvětlili jsme si, že, narozdíl od Delphi či Visual Basicu, má Python několik modulů, jak tvořit okna. Tkinter je jedním z nich.


Tlačítko vedle tlačítka

Úvod

Tkinter se vyznačuje tím, že je přímočarý, víceméně jednoduchý jak na naučení, tak na možnosti. Tím, že všechny udělátka, widgety, jsou generovány dynamicky, se může zdát složitějším. Na jednu stranu to je nevýhoda - tam, kde se v Delphi začíná s programováním, tam jsme v Tkinter uprostřed, protože se musí naprogramovat i vlastní rozmístnění udělátek. Na druhou stranu je to výhoda - naučíte se lépe programovat, získáte více programátorských technik, které v budoucnu pomohou. Nevýhoda může být také v tom, že je vývoj aplikace je pomalejší (více programování, méně klikání). Ale je to zase zábavnější, alespoň z mého hlediska.


Rozmýšlení především

To, že program funguje, je polovinou úspěchu. Druhou polovinou je, aby mu rozuměli i ostatní, aby byl srozumitelný a přehledný. Aby ho ostatní mohli nejen použít, ale i zdokonalit nebo případně využít ve svých programech. Stejně, jako to děláte vy s programy a moduly ostatních. Těmi ostatními budete vy sami - tak za jeden rok se na své výtvory podívejte a pochopíte o čem teď mluvím. Je to hezké, když je kód přehledně napsaný a vy se tak můžete něčemu přiučit, že jo? Skutečně - polovina času programátora spočívá v programování a druhá polovina ve zkrášlování a ve vylepšování. Pro druhé jako pro sebe.

  1. Uděláme takovou mřížku čtverečků, takové pole, takovou základnu pro mnoho tzv. plošinových her - piškvorky, puzzle, sudoku, had a co já vím, co ještě. Prostě vše, co se hraje na ploše a má základ v nějakém chození po políčkách nebo v pevném umístnění políček vůbec. Abych nezapomněl - taky dáma nebo snad i šachy?
  2. Nebudeme používat příliš mnoho if - Příliš mnoho if bývá zdrojem mnoha problému a mnoho lidí odrazuje. Svědčí to o neznalosti lepších technik, lepších datových struktur. Budeme používat hodně seznamy a slovníky.
  3. Příliš mnoho podmínek v if - Vždy se děsím, když vidím if s==2 and b==3 and c <10 and… Pro to platí vše, co bylo řečeno v předchozím bodu.
  4. Názvy proměnných - Často chceme ušetřit čas a používáme jména jako x, a, s, l, a2… Co ušetříme na psaní, ztratíme při hledání chyb. Nesmí se tento požadavek brát dogmaticky - např. x, y jsou vhodná jména pro souřadnice, ale to bývá většinou výjimka. Používejme příhodná a příznačná jména. Používejme editory, které zamezují překlepům (PSPad - Ctrl + J, IDLE - Shift + Alt + /).
  5. Dokumentační řetězce - Na konci práce si dejme práci s  vložením dokumentačního řetězce na začátek programu a na začátek každé funkce.
  6. Komentáře - K ožehavým místům našeho programu připojíme malý komentář.
  7. Funkce - Funkce jsou prostě skvělé. Zpřehlední váš kód výrazným způsobem a usnadní pozdější život (pokud tedy s nimi umíte pracovat). Teprve s funkcemi se z malého bezvýznamného skriptu může stát program s velkým P. ;-)
  8. 2× měř, jednou řež - Přemýšlejte. Pokud již máte rozhled, rozmýšlejte, kterou strategii zvolit na vyřešení problému. Jsou lepší a horší způsoby (algoritmy), nejlepší i nejhorší. Sem spadá i to, že se budu učit i to, co na první pohled nesouvisí s mým konkrétním problémem, že si projdu některé tutoriály od začátku do konce, že se budu snažit vše pochopit a nebudu to považovat za ztrátu času. Získám tak lepší přehled a základnu pro řešení mých pozdějších problémů.

První tlačítko

Rozhodli jsme se tedy pro Tkinter. Mohli jsme i něco jiného, ale to je naše (moje) rozhodnutí. Dále jsem se rozhodl, že jednotlivá políčka budou Tlačítka (Buttony). Klidně to mohou být Štítky (Label) - komu by nevyhovovalo promačkávání tlačítka. Myslím, že bude stačit přepsat slovo Button na Label. V tom je jedna z předností programového generování rozmístnění plochy. :-)

Uděláme si třeba pole 9×9, ale budeme myslet na to, aby jednoduchým trikem si to kdokoliv mohl změnit na 3×3 nebo 100×100. Snad i 30×10, ale to si nejsem zatím jistý. Začneme od jednoduchého po složitější, přesně tak, jak to říkal J. A. Komenský. Vytvoříme si jedno tlačítko, pak 4, pak 9 × 9 =81.

from Tkinter import *

hlavni = Tk()

tlacitko = Button(text="1")
tlacitko.pack()

hlavni.mainloop()

Všechny příkazy byly vysvětleny v lekcích 11 a 12, nebudu se jimi tedy dále zabývat. Co mě zaráží, je to, že tlačítko není čtvercové. To ihned napravíme. Šířka je zdánlivě 2× větší než výška. Když tlačítko obsahuje text, je šířka dána poměrně podle velikosti textu. No a třeba text „1“ je dvakrát vyšší než široký, tak proto musím šířku 2× udělat větší, aby byla stejně velká jako výška. Trochu zamotané, ale co se dá dělat:

velikost = 2
tlacitko = Button(text = "1", width = velikost*2, height = velikost)

.pack a .grid

Button tlačítko vytváří, pack ho zobrazuje. Metodě pack se také říká Správce zobrazení/rozmístnění. Je vhodná na jednoduché rozmístnění. Na složitější a přesnější je lépe používat jiného Správce - grid. U grid musíme přesně říci, na kterém pomyslném řádku a sloupci udělátko (tlačítko) leží. Začíná se na nule. V našem případě je tam jen jedna řádka a jeden sloupec - 0 a 0.

tlacitko.grid(row=0, column=0)

2×2

Chtějme vytvořit pole 4 tlačítek. Naprostá ošklivost by bylo tohle:

tlacitko1 = Button(text="1", width=velikost*2, height=velikost)
tlacitko1.grid(row=0, column=0)

tlacitko2 = Button(text="1", width=velikost*2, height=velikost)
tlacitko2.grid(row=0, column=1)

tlacitko3 = Button(text="1", width=velikost*2, height=velikost)
tlacitko3.grid(row=1, column=0)

tlacitko4 = Button(text="1", width=velikost*2, height=velikost)
tlacitko4.grid(row=1, column=1)

Tudy cesta nevede! Představte si tímto způsobem vytvářet 81 tlačítek! Kdo se v tom bude chtít pak vyznat? Raději se naučme něco nového.

Samozřejmě musíme použít cyklus - for bude nejlepší. Dále si musíme jednotlivá tlačítka pamatovat - budeme je dávat do seznamu. A taky musíme nějak vyřešit počítání řádků a sloupců.

seznamTlacitek = []
pocetRadku = 4
pocetSloupcu = 2
for poradi in range(pocetRadku*pocetSloupcu):
    tlacitko = Button(text=str(poradi), width=velikost*2, height=velikost)
    radek = ????
    sloupec = ?????
    tlacitko.grid(row=radek, column=sloupec)
    seznamTlacitek.append(tlacitko)

Jak vypočítat z pořadového čísla tlačítka řádek a sloupec? Na to vám ukáži jeden malý trik. Celočíselné dělení a zbytek po dělení. Zamyslete se nad tím, zkuste si to s konkrétními čísly, ať to pochopíte. Bude se vám to ještě hodit.

radek = poradi / pocetSloupcu
sloupec = poradi % pocetSloupcu

Instance

Button je třída tlačítek a tlacitko je jeho potomek, instance Buttonu. Je to krásně vidět, když zavřeme okno s tlačítky a necháme si Python prompt a zadáme:

>>> print seznamTlacitek
[<Tkinter.Button instance at 0x009E1170>, <Tkinter. Button instance at
 0x009E1260>, <Tkinter.Button instance at 0x009E1288>, <Tkinter.Button 
 instance at 0x009E12D8>]

<Tkinter.Button instance at 0x009E1170> - třeba zde se jedná o instanci třídy Button, která leží na adrese 0x009E1170. Adresa je u každého tlačítka jiná, podle toho se dají rozpoznat.

Původně jsme měli v programu instanci (proměnnou) pojmenovanou tlacitko, nyní tedy budeme k těmto instancím (proměnným) přistupovat takto (v těchto případech tedy není jedno, jestli print použiji nebo ne):

>>> seznamTlacitek[0]
<Tkinter.Button instance at 0x009E1170>  # to je instance
>>> print seznamTlacitek[0] 
.10359152  # to je vnitřní jedinečné "jméno" instance  
>>> seznamTlacitek[1]
<Tkinter.Button instance at 0x009E1260>

9×9

Pole tlačítek 9×9 získáme snad již jednoduše:

pocetRadku = 9
pocetSloupcu = 9

Pokračování příště. Ukážeme si, jak udělat, když kliknu na tlačítko, aby se něco stalo. Nebo když na něj dvojkliknu nebo kliknu pravým tlačítkem myši nebo Enterem apod.


Úkol

Pošlete mi funkční program s dokumentačním řetězcem a případně komentáři. Použijte ještě další parametry Button, kromě width a height, hlavně relief, abyste si vyzkoušeli vzhled tlačítka, případně barvy pozadí. Všechny možné parametry k Button najdete zde. Počet tlačítek <= 400.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

3 názory  —  3 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Pavel KosinaAutor programuje v Pythonu.
Web    

Nové články

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý