このサイト(および他のもの)を上下に検索しましたが、適切な解決策を見つけることができません。Tkinterスレッドが原因でUIがフリーズする
私は、サーバーに接続し、数秒ごとに自動的にメッセージを送信するクライアントプログラムと、ユーザーコマンドを持っています。私はこれに複数のスレッドを使用しています。 Enter Tkinter:「接続」ボタンを押すと、クライアントがサーバーに接続する際に、接続の試行がタイムアウトするか、または終了するまでUIがフリーズします。
私は、ボタンのコマンドパラメータから、メインループの内側から、そしてメインループの外側からスレッドを呼び出そうとしました。私は、メインループをスレッドに入れて、そこから接続用の新しいスレッドを作成しようとしました。 何も動作していないようです... 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関数またはメソッドを、ルートウィンドウが作成されたスレッド以外のスレッドから確実に呼び出すことはできません。 –