PDA

Visualizza la versione completa : [python] chiudere ciclo che si ripete all'infinito


cccicccio
13-04-2008, 21:15
Vi posto un semplice esempio che però mi può aiutare nel risolvere un mio problema un pò più complesso ma dello stesso tipo.
Dato il semplice programma:

from Tkinter import *
class MiaApp:
def __init__(self, genitore):
self.Contenitore = Frame(genitore)
self.Contenitore.pack(side = TOP)
self.pulsante1 = Button(self.Contenitore,
text = "AVVIA",
command = self.avvia)
self.pulsante1.pack(side = LEFT)
self.pulsante2 = Button(self.Contenitore,
text = "STOP",
command = self.stop)
self.pulsante2.pack(side = LEFT)

def avvia(self):
i = 0
while i==0:
print ("ciao")

def stop(self):
# come devo definire questa funzione?

radice = Tk()
miaApp = MiaApp(radice)
radice.mainloop()

Al momento in cui si clicca sul pulsante "AVVIA" ha inizio un ciclo infinito.
Come posso definire la funzione stop affinchè al momento in cui si clicchi sul pulsante "STOP" questo ciclo si annulli?
Come posso chiudere la funzione avvia?

billiejoex
13-04-2008, 23:28
Se la funzione che invochi è bloccante puoi lanciarla in un thread e all'interno del thread mettere un while che esca quando una data condizione non è più vera.
Anche se non c'è una GUI di mezzo nella test suite di pyftpdlib ho fatto una cosa molto simile per startare il server per fare i test e stopparlo quando sono terminati.
Ho definito una classe con due metodi, start e stop, che sono pressapoco quello che stai facendo tu.
Se vuoi dargli un'occhiata:
http://code.google.com/p/pyftpdlib/source/browse/tags/release-0.3.0/test/test_ftpd.py

...la classe è definita alla linea 989.
A 1024 puoi vedere il ciclo while, a 1030 il cambio della variabile "condizione" che determina l'uscita dal ciclo while.

Loading