我开发了一个应用程序来复制磁盘上的文件并在 Tkinter GUI 中显示其进度。它使用定制的shutil模块来复制文件。如果我直接使用我的自定义复制功能(没有 GUI)复制文件,那么它会正确复制所有文件并显示正在复制的文件的消息(已使用打印语句进行复制)。现在的问题是当我使用 GUI 执行相同的操作时,它会在一段时间后挂起。
我正在使用 Text Widget 来显示正在复制的文件的运行日志。基本上我在调用我的复制函数之前重新定向了标准输出,并且我正在使用“update_idletasks”来更新 GUI。
class TextRedirector(object):
def __init__(self, widget, tag="stdout"):
self.widget = widget
self.tag = tag
def write(self, str):
self.widget.configure(state="normal")
self.widget.insert("end", str, (self.tag,))
self.widget.update_idletasks()
self.widget.see('end')
self.widget.configure(state="disabled")
问题 1:Text 小部件中的文本大小是否有限制?我应该在我的代码中查看什么来解决这个挂起问题。
Query2:我注意到一旦调用了复制功能,我就无法使用“最小化”按钮,只能在操作结束后使用它。就我而言,我需要复制大量数据,所以我想最小化应用程序并继续我的其他工作。
更新:(工作解决方案)
如果我使用update
方法而不是update_idletasks
. 现在我的问题是为什么它不能与update_idletasks
. 据我所知,它还用于刷新 GUI 事件。
class TextRedirector(object):
def __init__(self, widget, tag="stdout"):
self.widget = widget
self.tag = tag
def write(self, str):
self.widget.configure(state="normal")
self.widget.insert("end", str, (self.tag,))
self.widget.update()
self.widget.see('end')
self.widget.configure(state="disabled")