Tkinter 滚动条干扰线程打印到文本小部件

问题描述

我有一个简单的 Tkinter GUI,它在单独的线程中运行一个函数,并通过重定向标准输出输出打印到文本小部件。

我想要一个滚动条来伴随文本框。但是,显示滚动条似乎会以某种方式使工作变得混乱,并且 GUI 会冻结。

我有一个包装器可以根据 this answer 重定向标准输出

@H_502_6@class StdOutRedirector(object): def __init__(self,widget): self.widget = widget def write(self,str): self.widget.configure(state = 'normal') self.widget.insert(END,str) self.widget.see(END) self.flush() self.widget.configure(state = 'disabled') def flush(self): self.widget.update_idletasks()

还有我的图形用户界面:

@H_502_6@class Console(Frame): def __init__(self,master): Frame.__init__(self,master,bg = 'gray',padx = 5,pady = 5) self.master = master self.old_stdout = sys.stdout self.output = Text(self.master,height = 30,width = 80,state = 'disabled') self.outScroll = Scrollbar(self.master,orient = 'vertical',command = self.output.yview) self.output.configure(yscrollcommand = self.outScroll.set) self.output.grid(row = 0,column = 1) self.outScroll.grid(row = 0,column = 2,sticky = 'nesw') def run(self): self.script_thread = threading.Thread(target = auto) sys.stdout = StdOutRedirector(self.output) self.script_thread.start() self.script_thread.join() sys.stdout = self.old_stdout def auto(): for i in range(40): print(i) time.sleep(0.1)

如果我的 GUI 中有滚动条,我只会看到一个打印语句,然后 Tk 应用程序就会冻结。但是,如果我关闭滚动条,我可以毫无问题地看到整个打印输出

另外,如果我不在单独的线程中调用函数,滚动条似乎没有问题。

关于滚动条正在做什么导致单独线程出现问题的任何想法?

谢谢,肖恩

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)