python - 如何在使用 .after 时更新 GUI?

标签 python tkinter

我正在尝试使用 tkinter 创建一个类似点击器的游戏作为练习。我对 tkinter 很陌生,所以如果问题非常基本,我深表歉意。我设置了一个按钮来添加点击次数,并且我还尝试设置自动点击功能。我的代码的问题是,点击次数仅在单击按钮时更新,而不是按预期每秒更新。我尝试直接在 master.after(1000,autoClick) 之后使用 label1.config(text=str(click)) 时遇到错误。有没有其他方法可以让 GUI 每秒更新一次?

from tkinter import *
import time

click = 0


master = Tk()

def onClick():
    global master
    global click
    click += 1
    label1.config(text=str(click))

def autoClick():
    global master
    global click
    click += 1
    master.after(1000,autoClick)
    label1.config(text=str(click))


autoClick()


label1=Label(master, text=str(click))
label1.pack()

clickButton = Button(master, text = "click", command = onClick)
clickButton.pack()

mainloop()

print(click)

错误信息


  File "D:\Anaconda\lib\tkinter\__init__.py", line 1476, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))

TclError: invalid command name ".!label"

最佳答案

该错误是由于您在创建label1之前调用了autoClick()造成的。只需将 autoClick() 移至 mainloop() 之前即可。

此外,您还可以将 onClick()autoClick() 合并到一个函数中,以同时支持自动和手动点击,如下所示:

from tkinter import *

click = 0

def updateClick(auto=False):
    global click
    click += 1
    label1.config(text=click)
    if auto: label1.after(1000, updateClick, True)

master = Tk()

label1=Label(master, text=click)
label1.pack()

clickButton = Button(master, text="click", command=updateClick)
clickButton.pack()

updateClick(True) # start the auto click task

mainloop()

print(click)

关于python - 如何在使用 .after 时更新 GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55465756/

相关文章:

python - 在 tkinter Canvas 中嵌入来自 Arduino 的 Matplotlib 实时绘图数据

python - 想要程序循环的说明 (Python)

python - 有没有办法使用 ffmpeg 将 RTSP 音频流仅流式传输到标准输出

python - celery 任务和 django 查询集缓存

python - Docker群服务到服务调用

python - Sprite 没有正确地朝向玩家旋转 我该如何解决这个问题?

python - Python的标准库可以做结构化日志记录吗?

python - 使用 tkinter 在直方图中显示出现次数

python - 以程序方式将占位符添加到 tkinter Entry 小部件

python - Tkinter:如何构建适用于多种不同屏幕分辨率的应用程序