Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Multithreading Tkinter滚动条干扰到文本小部件的线程打印_Multithreading_Python 2.7_Tkinter_Python Multithreading_Tkinter Text - Fatal编程技术网

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

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

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

我希望文本框中有一个滚动条。然而,滚动条的出现似乎在某种程度上破坏了工作,GUI冻结了

我有一个用于重定向stdout的包装器,它基于:

类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应用程序就会冻结。但是,如果我关闭滚动条,我可以看到整个打印输出,而不会出现问题

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

有没有关于滚动条是如何导致独立线程出现问题的想法

谢谢,肖恩