我搜索了這個網站(和其他人)上下,但我似乎無法找到正確的解決方案。Tkinter Threading導致UI凍結
我有一個客戶端程序,連接到服務器,並自動發送消息,每隔幾秒,以及用戶命令。我爲此使用了多個線程。 輸入Tkinter:一旦我點擊「連接」按鈕,我的用戶界面就會凍結,直到連接嘗試超時或直到時間結束,客戶端纔會連接到服務器。
我試着從按鈕的命令參數,從主循環內,以及主循環外調用線程。我試着把主循環放在一個線程中,然後從那裏爲連接創建一個新的線程。 似乎沒有任何工作... UI繼續掛起。
class EventSim(Frame):
def __init__(self, parent):
self.queue = Queue
Frame.__init__(self, parent)
self.parent = parent
def initUI(self,IP_Address,Port_Number,Events_Directory):
#...
self.Con_Button = Button(frame7,text='Connect', command = lambda:
self.connect(IP_Text.get(),Port_Text.get(),))
def connect(self,IP,Port):
ConnectionThread = Thread(eventsim.con_thread(IP,Port))
ConnectionThread.start()
def main():
root = Tk()
root.geometry("300x310+750+300")
Sim = EventSim(root)
eventsim.readconfig()
Sim.initUI(eventsim.ipa,eventsim.portnum,eventsim.event_dir)
root.mainloop()
所有Tkinter的互動需要在一個單獨的線程。你不能可靠地從除根創建窗口以外的任何線程調用tkinter對象上的tkinter函數或方法。 –