Ho riscontrato un problema durante l'interruzione del "feed"; l'argomento cancel non sembra avere alcun impatto sul metodo after. Anche se "Feed stopped" viene stampato sulla console.Come posso interrompere tkinter dopo la funzione?
Sto tentando di avere un pulsante che avvierà il feed e un altro che interromperà il feed.
from Tkinter import Tk, Button
import random
def goodbye_world():
print "Stopping Feed"
button.configure(text = "Start Feed", command=hello_world)
print_sleep(True)
def hello_world():
print "Starting Feed"
button.configure(text = "Stop Feed", command=goodbye_world)
print_sleep()
def print_sleep(cancel=False):
if cancel==False:
foo = random.randint(4000,7500)
print "Sleeping", foo
root.after(foo,print_sleep)
else:
print "Feed Stopped"
root = Tk()
button = Button(root, text="Start Feed", command=hello_world)
button.pack()
root.mainloop()
Con l'uscita:
Starting Feed
Sleeping 4195
Sleeping 4634
Sleeping 6591
Sleeping 7074
Stopping Feed
Sleeping 4908
Feed Stopped
Sleeping 6892
Sleeping 5605
Non sono completamente sicuro di come funziona tkinter, ma mi sembra piuttosto un problema di threading. Se si effettua una cancellazione globale (thread safe), questo risolve il problema? – mklauber
@mklauber: no, non è un problema di threading. Tkinter è single-threaded. –
@BryanOakley: Grazie. Questo è il motivo per cui ho postato un commento. Non ero sicuro quindi volevo solo sollevare la domanda. – mklauber