我一直试图用2个按钮制作一个程序,按下其中一个会启动一个无限循环而按下另一个会停止它。
我试过的所有方法都会暂停循环。
from Tkinter import *
import time
s = 0
def stopit():
s = 1
print "stoped"
#
def callback():
if s == 0:
while True:
print "called the callback!"
time.sleep(3)
if s == 1:
break
#
#
#
#
root = Tk()
def main():
# create a menu
menu = Menu(root)
root.config(menu=menu)
b = Button(root, command=stopit)
b.pack()
filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New", command=callback)
filemenu.add_command(label="Open...", command=callback)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=callback)
helpmenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpmenu)
helpmenu.add_command(label="About...", command=callback)
mainloop()
time.sleep(3)
#
main()
答案 0 :(得分:2)
您的代码存在两个问题:
callback
方法永远不会完成(由于无限循环),导致GUI冻结。相反,在方法完成后,使用after
方法安排callback
的另一次执行。stopit
方法会创建一个本地变量s
,而不是更改全局变量global
。使用def stopit():
global s
s = 1
print "stopped"
def callback():
if s == 0:
print "called the callback!"
root.after(3000, callback)
关键字来解决此问题。将这两种方法更改为类似的方法,它应该有效:
{{1}}