Я работаю на асинхронном TCP-сервере.
Все идет хорошо, и я многому у меня учусь, но у меня есть вопрос, связанный со структурой.
Вот как выглядит структура:
Объект Server - это асинхронный TCP-сервер, работающий в своем собственном потоке.
Он связывается с объектом GUI Controller через поточно-ориентированные очереди.
В главном потоке у нас есть контроллер графического интерфейса пользователя, mainloop tkinter и реальный класс графического интерфейса Tkinter.
вот код, чтобы сделать его более понятным:
clientlist = []
#queue's for communicating with server thread
buffer = queue.Queue()
buffer2 = queue.Queue()
root = Tk()
#GUI controller
controller = Controller(buffer,buffer2,clientlist,root)
#Make Tkinter GUI and give a reference to the controller
top = MainWindow(controller, root)
#Giving Tkinter GUI reference to the controller
controller.set_top(top)
t1 = threading.Thread(target=run_server, args=(buffer,buffer2))
t1.start()
controller.check_connections()
root.protocol("WM_DELETE_WINDOW", on_closing)
try:
while controller.run:
root.mainloop()
print("[i] Joining server thread.")
t1.join()
Мне трудно найти хороший способ заставить графический интерфейс Tkinter взаимодействовать с графическим контроллером. Идея дать ссылку на класс друг друга не работает:
Если я дам MainWindow ссылку на Controller , мне нужно сохранить его в переменной в конструкторе MainWindow . Затем мне нужно обновлять эту переменную каждый цикл, который очень требователен.
Как я могу дать ссылку правильным способом, или есть лучший способ дать этим двум классам общаться?
Большое спасибо!