Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 如何在回调期间更新窗口?_Python_Python 3.x_Callback_Tkinter - Fatal编程技术网

Python 如何在回调期间更新窗口?

Python 如何在回调期间更新窗口?,python,python-3.x,callback,tkinter,Python,Python 3.x,Callback,Tkinter,当单击Tkinter按钮并运行命令时,GUI似乎处于冻结状态,直到命令返回 例如,计数器在2秒后才会更新: 将tkinter作为tk导入 导入时间 类窗口(): 定义初始化(自): self.clicks=0 self.root=tk.tk() self.button_text=tk.StringVar(value=“Click”+str(self.clicks)) self.button=tk.button(self.root,textvariable=self.button\u text,

当单击Tkinter按钮并运行命令时,GUI似乎处于冻结状态,直到命令返回

例如,计数器在2秒后才会更新:

将tkinter作为tk导入
导入时间
类窗口():
定义初始化(自):
self.clicks=0
self.root=tk.tk()
self.button_text=tk.StringVar(value=“Click”+str(self.clicks))
self.button=tk.button(self.root,textvariable=self.button\u text,
command=self.click)
self.button.pack()
def单击(自我):
self.clicks+=1
self.button_text.set(“单击”+str(self.clicks))
时间。睡眠(2)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
Window().root.mainloop()

是否有任何方法允许在回调期间更新窗口?

睡眠正在阻止gui的事件循环

您可以调用按钮的方法:


将该行添加到
单击
将导致按钮的文本立即更新。

我意识到,有没有办法在calback期间更新它?我想将状态栏更新为“正在工作…”,然后做一些工作(可能需要一段时间),然后将其更新为“完成”。你必须在单独的线程中完成需要时间的工作。无论你尝试了什么技巧,睡眠都会导致GUI睡眠。您不应该在GUI的主线程中调用sleep。另外,根据经验,你应该始终使用
update\u idletasks
而不是
update
,除非你必须使用
update
@BryanOakley-我同意你的两个观点。第二个我现在就要实现。然而,关于第一个,我不认为OP实际上是无缘无故地睡觉。相反,我认为他使用了
time.sleep
来表示一个耗时的操作。
def click(self):
    self.clicks += 1
    self.button_text.set("Click " + str(self.clicks))
    ##################################
    self.button.update_idletasks()
    ##################################
    time.sleep(2)