问题描述
我有一个简单的 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 (将#修改为@)