Python tkinter 启动和停止循环?

标签 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()

最佳答案

您的代码有两个问题:

  • 您的回调方法永远不会完成(由于无限循环),导致 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/

相关文章:

ios - 如何让循环等到 block 完成?

java - For 循环错误 -> if 语句不产生输出

python - 如何在命令函数调用中避免全局变量

python - 为什么在此示例中需要 lambda 表达式? (Python)

python - 刷新 ping 定时器

Python:-mno -cygwin

庆典 4.2/4.3 : Different behavior in C-style loop

python - 如何从列表创建复选框

python - celery 节拍 : ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN

python - Django Selenium 测试,创建用户并检查登录