Tengo un problema al detener el 'feed'; el argumento cancelar no parece tener ningún impacto en el método posterior. Aunque "alimentación detenida" se imprime en la consola.¿Cómo detengo tkinter después de la función?
Estoy intentando tener un botón que iniciará la alimentación y otro que detendrá la alimentación.
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 la salida:
Starting Feed
Sleeping 4195
Sleeping 4634
Sleeping 6591
Sleeping 7074
Stopping Feed
Sleeping 4908
Feed Stopped
Sleeping 6892
Sleeping 5605
No estoy del todo seguro sobre cómo funciona tkinter, pero esto se parece bastante a un problema de enhebrado para mí. Si haces que cancelar un (hilo seguro) global, ¿resuelve el problema? – mklauber
@mklauber: no, no es un problema de enhebrado. Tkinter tiene un solo subproceso. –
@BryanOakley: Gracias. Es por eso que publiqué como comentario. No estaba seguro así que solo quería plantear la pregunta. – mklauber