[Python] Tkinter

Mauro Maccari mauro.maccari a gmail.com
Ven 11 Apr 2008 20:53:39 CEST


Grazie Daniele, era proprio ciò di cui avevo bisogno!


Il 11/04/08, Daniele Varrazzo<piro a develer.com> ha scritto:
> <afa8af2d014a59245265ef85ebb4163f a develer.com> <77d767450804110721m4a403ac5y844fcc4cabae5765 a mail.gmail.com>
>  Message-ID: <2a7ba476323ca7afb16c129f827aa26a a develer.com>
>  X-Sender: piro a develer.com
>  Received: from 82.111.147.97 [82.111.147.97] with HTTP/1.1 (POST); Fri, 11 Apr
>         2008 17:51:11 +0200
>  User-Agent: RoundCube Webmail/0.1
>  Content-Type: text/plain; charset="UTF-8"
>  Content-Transfer-Encoding: 8bit
>
>
>  On Fri, 11 Apr 2008 16:21:16 +0200, "Mauro Maccari"
>
> <mauro.maccari a gmail.com> wrote:
>
> > ciao Daniele
>  > penso che la soluzione più facile sia richiamare il loop degli eventi
>  > visto che la funzione
>  > dura poco.
>
>
> Non puoi "richiamare" il loop degli eventi: quello gira da se', e *deve*
>  girare, altrimenti tutto freezza.
>
>  Se hai una funzione long running, quello che puoi fare e' di quando in
>  quando lanciare un process_events() (nome inventato, ma qualcosa omologa
>  c'e' in tutti i framework UI che conosco, immagino sia anche in tkinter).
>
>  la tua funzione non dura poco, perche'
>
>
>          while self.run:
>              print "On"
>
>
> dura potenzialmente per sempre: ovvero finche' il checkbox e' flaggato.
>  (tra l'altro vale sempre true perche' "self.run" e' un oggetto, non un
>  numero o un bool: devi fare "self.run.get()"). E' il singolo 'print "On"' a
>  durare poco, ed e' solo questo da far chiamare periodicamente dal
>  framework.
>
>  Lo snippet seguente funziona come ti aspetti. Non uso "idle" ma uso un
>  timer che chiama periodicamente la funzione se il flag e' checkato. Nota
>  che il trigger scatta una sola volta, quindi per ottenere la periodicita'
>  occorre registrarlo nuovamente ogni volta che scatta (finestra.after)
>
>
>     from Tkinter import *
>     class Application(Frame):
>
>         def __init__(self, master):
>
>             frame = Frame()
>             frame.pack(padx = 50, pady = 20)
>
>             self.run = IntVar()
>             self.running=Checkbutton(frame, text="ON/OFF", fg="red",
>
>                  variable=self.run, command=self.report)
>
>             self.running.grid(row=0 , column=0)
>
>
>         def report(self):
>             if self.run.get():
>                 print "On"
>                 finestra.after(200, func=app.report)
>
>
>     finestra = Tk()
>     app = Application(finestra)
>     finestra.mainloop()
>
>
> Ref. http://infohost.nmt.edu/tcc/help/pubs/tkinter/universal.html
>
>
>  --
>  Daniele Varrazzo - Develer S.r.l.
>  http://www.develer.com
>
>
> _______________________________________________
>  Python mailing list
>  Python a lists.python.it
>  http://lists.python.it/mailman/listinfo/python
>
>


-- 
Mandare alle persone documenti in formato Word ha effetti negativi,
perché questa pratica le spinge ad usare software Microsoft. Di fatto,
diventi un puntello del monopolio di Microsoft. Questo specifico
problema è un notevole ostacolo ad una più ampia adozione del software
libero. Vorresti per favore riconsiderare l'uso del formato Word per
comunicare con altre persone?


Maggiori informazioni sulla lista Python