python - 如何使 tkinter 按钮与我的脚本交互?
问题描述
我是编码新手并试图弄清楚这一点,但我做不到,而且我似乎也无法在 youtube 上找到任何显示这一点的视频。
基本上我想要做的是运行一个循环,并且能够单击一个按钮并更改循环中的一个变量。例如:
from tkinter import *
import time
root = Tk()
x = 0
def changeVariable():
x = x + 5
button1 = Button(root, text="add 5", command=changeVariable)
button1.pack()
while True:
root.mainloop()
while x > 0:
print("X is greater than 0")
x = x - 1
time.sleep(1)
else:
print("Please click the button")
time.sleep(1)
我已经尝试了各种各样的事情,但我无法在我的 while 循环中获得更改 X 值的按钮。有人可以解释一下如何做到这一点或链接一个视频/指南,可以很好地向新手解释这一点吗?
谢谢
解决方案
您不能将代码放在主循环之后。您不需要root.mainloop
,因为您的代码中已经有一个永久循环。您可以删除root.mainloop
,您的代码应该可以工作。
编辑:另一个问题是 x 没有全局定义。在changeVariable
函数的开头,添加代码global x
.
最后一个问题是您使用time.sleep()
. 您不想使用 a time.sleep
,因为在冻结所有内容时可能会按下按钮。有关修复,请参见编辑 2。
编辑2:
您可以使用 tkinterafter
方法。该after
方法可以应用于任何 tkinter 对象。在这种情况下,我们会将其应用于 root。这是基本语法:root.after(milliseconds, function_to_execute_after_wait)
. 要执行的功能是可选的。在您的情况下time.sleep(1)
,您应该使用. 而不是root.after(1000)
. 确保root.update()
在您的root.after(1000)
.
您还可以使用+=
or-=
来更改变量。而不是x = x + 5
,您可以使用x += 5
. 而不是x = x - 1
,您可以使用x -= 1
.
最终代码:
from tkinter import *
root = Tk()
x = 0
def changeVariable():
global x
x += 5
button1 = Button(root, text="add 5", command=changeVariable)
button1.pack()
while True:
while x > 0:
print("X is greater than 0")
x -= 1
root.after(1000)
root.update()
else:
print("Please click the button")
root.after(1000)
root.update()