Multithreading Tkinter滚动条干扰到文本小部件的线程打印
我有一个简单的Tkinter GUI,它在单独的线程中运行一个函数,并通过重定向stdout将输出打印到文本小部件 我希望文本框中有一个滚动条。然而,滚动条的出现似乎在某种程度上破坏了工作,GUI冻结了 我有一个用于重定向stdout的包装器,它基于:Multithreading Tkinter滚动条干扰到文本小部件的线程打印,multithreading,python-2.7,tkinter,python-multithreading,tkinter-text,Multithreading,Python 2.7,Tkinter,Python Multithreading,Tkinter Text,我有一个简单的Tkinter GUI,它在单独的线程中运行一个函数,并通过重定向stdout将输出打印到文本小部件 我希望文本框中有一个滚动条。然而,滚动条的出现似乎在某种程度上破坏了工作,GUI冻结了 我有一个用于重定向stdout的包装器,它基于: 类StdOutRedirector(对象): 定义初始化(自我,小部件): self.widget=widget def写入(self,str): self.widget.configure(状态='normal') self.widget.in
类StdOutRedirector(对象):
定义初始化(自我,小部件):
self.widget=widget
def写入(self,str):
self.widget.configure(状态='normal')
self.widget.insert(END,str)
self.widget.see(结束)
self.flush()
self.widget.configure(状态='disabled')
def冲洗(自):
self.widget.update_idletasks()
还有我的GUI:
类控制台(框架):
定义初始(自我,主):
帧。初始帧(self,master,bg='gray',padx=5,pady=5)
self.master=master
self.old\u stdout=sys.stdout
self.output=Text(self.master,高度=30,宽度=80,状态='disabled')
self.outScroll=滚动条(self.master,orient='vertical',command=self.output.yview)
self.output.configure(yscrollcommand=self.outScroll.set)
self.output.grid(行=0,列=1)
self.outScroll.grid(行=0,列=2,粘性='nesw')
def运行(自):
self.script\u thread=threading.thread(target=auto)
sys.stdout=StdOutRedirector(self.output)
self.script_thread.start()
self.script\u thread.join()
sys.stdout=self.old\u stdout
def auto():
对于范围(40)内的i:
印刷品(一)
睡眠时间(0.1)
如果我的GUI中有滚动条,我只会看到一条打印语句,那么Tk应用程序就会冻结。但是,如果我关闭滚动条,我可以看到整个打印输出,而不会出现问题
此外,如果我不在单独的线程中调用该函数,则滚动条似乎没有问题
有没有关于滚动条是如何导致独立线程出现问题的想法
谢谢,肖恩