我遇到了阻止'feed'的问题;取消参数似乎对after方法没有任何影响。尽管“馈送停止”被打印到控制台。如何在功能后停止tkinter?
我试图有一个按钮,将开始饲料和另一个将停止饲料。
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()
随着输出:
Starting Feed
Sleeping 4195
Sleeping 4634
Sleeping 6591
Sleeping 7074
Stopping Feed
Sleeping 4908
Feed Stopped
Sleeping 6892
Sleeping 5605
我不完全确定tkinter是如何工作的,但这看起来像是一个线程问题。如果您取消全局(线程安全),那么这是否可以解决问题? – mklauber 2012-03-19 19:46:12
@mklauber:不,不是线程问题。 Tkinter是单线程的。 – 2012-03-19 20:31:40
@BryanOakley:谢谢。这就是我作为评论发布的原因。我不确定,所以我只是想提出这个问题。 – mklauber 2012-03-19 20:33:04