我一直在尝试制作一个带有 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()
最佳答案
您的代码有两个问题:
- 您的
回调
方法永远不会完成(由于无限循环),导致 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)
关于Python tkinter 启动和停止循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20457148/