如何在 tKinter 中使用布尔变量退出循环



我试图做的是在按下"开始"按钮后启动一个函数,并能够在它循环时通过按下带有布尔变量和 if 语句的 Stop 按钮来停止它。我不知道如何让它工作。

from tkinter import *
def listen():
if running==True:
print("running")
def startCommand():
global running
running=True
def stopCommand():
global running
running=False
print("stop")

running=True
root = Tk()
root.geometry("200x100")
startButton=Button(root, text="Start", command=startCommand)    
startButton.pack()
exitButton=Button(root, text="Stop", command=stopCommand)
exitButton.pack()
root.after(100, listen)
root.mainloop()

这是一个简单的修复,.after调度一个函数只运行一次(在设定的毫秒数之后):

def listen():
if running:
print("running")
root.after(100, listen)

因此,如果您希望函数循环,您也可以重新安排函数在函数本身中再次运行。

顺便说一句,if variable == True:if variable:相同(如果variable是其他对象,它也会将计算为 True),if variable == Falseif not variable:相同(如果变量是空字符串 ("") 或整数0NoneFalseif not variable:也会被执行)

另外:
我强烈建议在导入某些内容时不要使用通配符(*),您应该导入所需的内容,例如from module import Class1, func_1, var_2等等或导入整个模块:import module然后你也可以使用别名:import module as md或类似的东西,关键是不要导入所有内容,除非你真的知道你在做什么;名称冲突是问题所在。

我强烈建议遵循PEP 8 - Python Code风格指南。函数和变量名应该在snake_case中,类名应该在CapitalCase中。如果它用作关键字参数的一部分(func(arg='value')),则=周围没有空格,但如果用于分配值(variable = 'some value'),则=周围有空格。在运算符周围留出空间(+-/等:value = x + y(这里除外value += x + y))。在函数和类声明周围有两个空行。

最新更新