首页 > 解决方案 > 如何使 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 值的按钮。有人可以解释一下如何做到这一点或链接一个视频/指南,可以很好地向新手解释这一点吗?

谢谢

标签: pythonpython-3.xuser-interfacetkinter

解决方案


您不能将代码放在主循环之后。您不需要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()

推荐阅读