我遇到了阻止'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