Python tkinter启动和停止循环?

时间:2013-12-08 18:23:04

标签: python loops tkinter

我一直试图用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()

1 个答案:

答案 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}}