> Ahoj, posílám ten zdrojový kod.
>

Je vidět, že vycházíš z kámen-nůžky-papír na naučse:
https://naucse.python.cz/course/pyladies/beginners/comparisons/ (až na
konci stránky)

To, co je na naučse, je jednoduchý program. Zjistí si vstup, něco udělá,
vypíše nějaký výstup, konec. Většina programů pro příkazovou řádku je
takhle jednoduchá. A jedoduše se to programuje.

Ty se teď ale snažíš o okýnkovou aplikaci. Ty už tak jednoduché nejsou.
Okýnková aplikace se spustí, ale nemůže ještě nic dělat, musí počkat, až do
ní uživatel začne nějak klikat, aby vůbec věděla co má dělat. A pak je to
ještě horší! Nejenže musí začít něco dělat, ale *mezitím* musí stále
reagovat na uživatelovo klikání (jak vypadá zaseklý program, který v tomto
selhal, jsi už asi někdy zažil). Takže programování okýnkových aplikací
proto není tak jednoduchý jako těch pro příkazovou řádku.

Okýnkový aplikace fungujou tak, že
1) sestavíš nějaký prvotní stav té aplikace - vytvoříš okno, do něj dáš
texty (labels), tlačítka, tabulky, obrázky apod.
2) dál už nic - spustíš nějakou funkci, která si běh programu zcela
převezme a běží typicky až do konce tvého programu. Tahle funkce obsahuje
nekonečnou smyčku (tzv. *event loop*), která zpracovává všechny vstupy
(klikání myší, klávesnice, hodiny, signály, síť apod.) a nějak na ně
reaguje.

Jak teda udělat, aby tvoje aplikace po kliknutí na tlačítko něco dělala? To
se dělá tak, že tomu tlačítku nastavíš tzv. *handler* (někdy se tomu říká
*callback*, nebo *action* apod.), což je funkce, která je zavolána v reakci
na kliknutí na tlačítko, a ty v tomhle handleru (v té funkci) můžeš zkusit
něco udělat (samozřejmě můžeš volat další funkce, nemusí to být fyzicky v
jedné obrovské funkci). Ale nemělo by to trvat moc dlouho, aby program
nevypadal zaseklý.

Z toho plyne, že veškerá logika té aplikace, pokud to není inicializace
(tvorba toho prvotního stavu), tak bude uvnitř nějakého handleru. Takže je
zřejmé, že tvoje if tah_clovek == "Kámen": je na špatném místě - není to
uvnitř žádného handleru.

Když se na svůj program podíváš tak, jak se na něj dívá Python - prostě
jedeš odshora dolu - tak to nemůže fungovat.
- importuješ něco - ok
- vytvoříš window a lblněco - ok
- vytvoříš moznosti a tah_pocitac - ok
- vytvoříš nějaké funkce, které se jmenují Kamen, Nuzky a Papir - ok.
Pozor, ty funkce nejsou spuštěny, jen jsou "zaevidovány", proměnná
tah_clovek teď nikde neexistuje.
- vytvoříš nějaké buttony - ok. Těm buttonům dáš odkaz na ty předchozí
funkce. To ale ty funkce nespustí. Jen ty buttony budou vědět, že když se
na ně někdy v budoucnu klikne, tak teprve potom se spustí tyhle jejich
funkce.
- další lblněco
- a teď je tam nějaký if tah_clovek. Co to je? Žádná proměnná tah_clovek
přeci neexistuje. Doteď nebyla nijak vytvořena. Python panikaří a končí.
Oprávněně.

Zkus svůj program upravit.

To, že ve funkci Kamen (stejně tak Nuzky a Papir) máš porovnání místo
přiřazení, a že kdyby to bylo přiřazení, tak by ta proměnná byla lokální
jen v té funkci a nebyla by vidět "ven", je jen detail.

PM

-- 
-- 
E-mailová skupina [email protected]
Správa: http://groups.google.cz/group/django-cs
--- 
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs 
ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete 
e-mail na adresu [email protected].
Chcete-li zobrazit tuto diskusi na webu, navštivte 
https://groups.google.com/d/msgid/django-cs/CAK9Q5BTZWx1xeD57YM1Y%2BS1cDtLRQ6si-UT48OnPPCbgC194nw%40mail.gmail.com.
Další možnosti najdete na adrese https://groups.google.com/d/optout.

Reply via email to