Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [python] chiudere ciclo che si ripete all'infinito

    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?

  2. #2
    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/s...t/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.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.