Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在使用.after时使用更新GUI?_Python_Tkinter - Fatal编程技术网

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

Python 如何在使用.after时使用更新GUI?,python,tkinter,Python,Tkinter,我正在尝试创建一个类似点击器的游戏,作为使用tkinter的练习。我对tkinter很陌生,所以如果问题很基本,我很抱歉。我设置了一个按钮来增加点击次数,我还尝试设置一个自动点击功能。我的代码的问题是,点击次数只会在点击按钮时更新,而不是按预期每秒钟更新一次。我试图直接在master.after(1000,autoClick)后面使用label1.config(text=str(click))时出错。有没有其他方法让GUI每秒更新一次 from tkinter import * import t

我正在尝试创建一个类似点击器的游戏,作为使用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()
。只需在
mainloop()之前移动
autoClick()

此外,您还可以将
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)

您在创建
label1
之前调用该函数。将
autoclick
功能移到mainloop()之前