Закрытие окна tkinter в другом потоке
Как я вижу программу: Окно Lobby горит, пока ожидается подключение другого игрока. Когда второй игрок подключится, окно закрывается и открывается игра.
Я создаю новый поток при инициализации окна tkinter. conn
- это функция в которой происходит ожидание подключения к серверу (socket.accept()
). После подключения вызывается функция game_start
, в которой происходит уничтожение окна tkinter и открытие окна pygame в классе Game
.
Вылетает ошибка, при уничтожении окна, связанная с закрытием не в основном потоке. Хотелось бы отследить завершение потока, и вызвать game_start
из основного потока.
Важно: Game
, conn
, app.mainloop
- блокируют поток, важно, чтобы этого не происходило
Хотя блокировка из-за mainloop
необходима, пока не завершится второй поток
class Lobby:
def __init__(self, name, conn, api):
self.app = tk.Tk()
self.app.geometry('500x500')
self.app.title(f"Лобби ({name})")
label = ttk.Label(self.app, text='Ожидаем')
label.pack()
Thread(target=lambda: conn(lambda: self.game_start(api))).start()
self.app.mainloop()
def game_start(self, api):
print('lobby destroy')
print('Запускаю game')
from Game.Game import Game
self.app.destroy()
Game(api)
Это функция conn
:
def __start(self, start):
self.conn, self.addr = self.accept()
print('Соединение установлено(сервер)')
start()