我的应用程序可以接收它使用线程处理的多个作业。我为每个作业创建了包含文本小部件的选项卡,但在将文本插入文本小部件时遇到了问题。
应用程序只是挂起没有错误。
使用此处找到的脚本生成选项卡:http: //code.activestate.com/recipes/577261-python-tkinter-tabs/
选项卡是 Frames 的子类,当它们未被选中时使用 pack_forget() 隐藏。
我的应用程序的简化版本
服务器.py
class supply_thread(threading.Thread):
def __init__(self, _sock, app):
threading.Thread.__init__(self)
self.app = app
def run(self):
def close_tab():
print 'Terminating supply.'
new_supply.kill()
# Create new tab
self.tab = Frame(self.app)
self.tab.pack()
#self.tab.pack_forget() # <-- inserting this causes the app to hang
# Scrollbar
self.scrollbar = Scrollbar(self.tab)
self.scrollbar.pack(side=RIGHT, fill=Y)
# Text
self.text = Text(self.tab, yscrollcommand=self.scrollbar.set)
self.scrollbar.config(command=self.text.yview)
self.text.pack(expand=YES, fill=BOTH)
# Close
self.button = Button(self.tab, text="CLOSE", command=close_tab)
self.button.pack(side=BOTTOM, fill=BOTH, expand=YES)
print 'Starting thread' , data[0]['job'] , data[0]['supply']['dir_name'] , self.getName()
logging.info(data[0])
new_supply = supply.supply(data, self.app, self.text)
new_supply.run()
print 'Closing Thread' , data[0]['job'] , data[0]['supply']['dir_name'] , self.getName()
主文件
class App(Tk):
def __init__(self, master=None):
Tk.__init__(self, master)
tab1 = Frame(self)
tab1.pack()
self.scrollbar = Scrollbar(tab1)
self.scrollbar.pack(side=RIGHT, fill=Y)
self.text1 = Text(tab1, yscrollcommand=self.scrollbar.set)
self.scrollbar.config(command=self.text1.yview)
self.text1.pack(expand=YES, fill=BOTH)
if __name__ == "__main__":
app = App()
server = server(app)
server.daemon = True
server.start()
app.mainloop()
我认为这就是导致问题的原因......如果是这样,还有其他选择吗?
预先感谢您的任何帮助。