Re: [python] Tkinter: mainloop()

2009-06-04 Tema obsahu Lansky, Milan
Dekuji moc,

Presne to jsem potreboval:
import Tkinter
def prn():
root.after(1000,prn)
print 'Text..'

root = Tkinter.Tk()
root.after(1000,prn)
root.mainloop()

Akorat mala podotazka, neni nejaka jina funkce podobna after, abych ji zavolal 
pouze jednou a ne v kazdem kroku. 
Neco jako every_time(deltime, funkce)

Omlouvam se, ale tyto informace jsem nenasel v zadnem uvodu do Tk(). Asi si 
koupim knizku.

Milan


-Original Message-
From: python-boun...@py.cz [mailto:python-boun...@py.cz] On Behalf Of Filip 
Štědronský
Sent: Wednesday, June 03, 2009 7:03 PM
To: Konference PyCZ
Subject: Re: [python] Tkinter: mainloop()

Dne 3.6.2009 18:43:30 napsal lan...@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.Š.

-- 
regn...@matfyz.cz • http://regnarg.matfyz.cz • regn...@jabber.cz

.  \ | /
.  — ☺ —   S láskou se nerodíme, ale s láskou se stáváme lidmi. 
.  / | \ 


___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

This e-mail and any attachment is for authorised use by the intended 
recipient(s) only. It may contain proprietary material, confidential 
information and/or be subject to legal privilege. It should not be copied, 
disclosed to, retained or used by, any other party. If you are not an intended 
recipient then please promptly delete this e-mail and any attachment and all 
copies and inform the sender. Thank you.
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Re: [python] Tkinter: mainloop()

2009-06-03 Tema obsahu Pavel Kosina

Pavel Kosina napsal(a), dne 3.6.2009 19:09:

Lansky napsal(a), dne 3.6.2009 18:43:


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.




Uděláte si například tlačítko, tlačítku přiřadíte nějakou funkci a do 
funkce dáte nějaký kód. Pokud chcete nějaký kod spouštět opakovaně bez 
jakékoliv příčiny, použijte metodu after, jak popsal regnard.




Omlouvám se, samozřejmě regnarg ;-) alias F.Š.

--
geon
Pavel Kosina

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Tkinter: mainloop()

2009-06-03 Tema obsahu Pavel Kosina

Lansky napsal(a), dne 3.6.2009 18:43:


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.




Uděláte si například tlačítko, tlačítku přiřadíte nějakou funkci a do 
funkce dáte nějaký kód. Pokud chcete nějaký kod spouštět opakovaně bez 
jakékoliv příčiny, použijte metodu after, jak popsal regnard.


--
geon
Pavel Kosina

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Tkinter: mainloop()

2009-06-03 Tema obsahu Filip Štědronský
Dne 3.6.2009 18:43:30 napsal lan...@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.Š.

-- 
regn...@matfyz.cz • http://regnarg.matfyz.cz • regn...@jabber.cz

.  \ | /
.  — ☺ —   S láskou se nerodíme, ale s láskou se stáváme lidmi. 
.  / | \ 


___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Re: [python] Tkinter: mainloop()

2009-06-03 Tema obsahu Filip Štědronský
Dne 3.6.2009 18:43:30 napsal lan...@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.

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


-- 
regn...@matfyz.cz • http://regnarg.matfyz.cz • regn...@jabber.cz

.  \ | /
.  — ☺ —   S láskou se nerodíme, ale s láskou se stáváme lidmi. 
.  / | \ 


___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python