[python] Tkinter: mainloop()

Filip Štědronský regnarg na seznam.cz
Středa Červen 3 19:03:19 CEST 2009


Dne 3.6.2009 18:43:30 napsal Lansky na pop3.seznam.cz:
> Zdravim,
> 
> Potreboval bych poradit jak v Tkinetr provadet programovy kod vramci
> cyklu mainloop(). Jak muzu svuj kod spoustet v mainloop. Nikde nemuzu
> najit zadny popis.

Omlouvám se za duplikát, ale omylem se mi povedlo poslat mail
v půlce.

Vedlejším důsledkem toho jak všechny GUI toolkity Tkinter 
nevyjímaje fungují je, že jejich mainloop musí běžet "pořád", 
tedy alespoň pokud chceme, aby aplikace nepřestala reagovat.
Nemůžeme tedy spustit žádný déle (třeba v řádech sekund) běžící
kód, protože po tuto dobu by program nereagoval na uživatelský 
vstup a ani nepřekresloval okno (známý efekt "šedých a býlých 
obdélníků", pokud ho třeba něčím překryjeme). Pokud nechcete 
používat vláken (která jsou většinou v GUI zdrojem mnoha 
nepříjemných situací) nebo více procesů, je nutné kód 
"rozkouskovat" na části které běží dostatečně krátko a ty
pak spouštět v rámci mainloopu --- nejčastěji jako reakce na
události, nebo načasovaně, metodou after objektu Tk:

def metoda():
    ...
tk_objekt.after(50, metoda)

Spustí kód metody za 50 milisekund od volání after (až se řízení
vrátí zpět k mainloopu, samozřejmě).

Snad to dává nějaký smysl
F.Š.

-- 
regnarg na matfyz.czhttp://regnarg.matfyz.czregnarg na jabber.cz
————————————————————————————————————————————————————————————————
.  \ | /
.  — ☺ —   S láskou se nerodíme, ale s láskou se stáváme lidmi. 
.  / | \                     




Další informace o konferenci Python