Вот пример структуры, которую я сделал для одного из моих проектов, содержащих Сервер (ваш фактический основной код), * 1019 * и третью программу, которую я назвал «Приложение», которая просто запускает 2. Я создал такие функции, как link_with_gui
или link_with_server
, чтобы вы могли получить доступ к переменным GUI с сервера и наоборот.
Чтобы запустить эту программу, вам просто нужно вызвать python app.py
. Я добавил разделы if __name__ == '__main__'
на сервере и GUI, чтобы вы могли запускать их независимо (для целей тестирования).
РЕДАКТИРОВАТЬ: я обновил свой код с потоками. На сервере у вас есть бесконечное число l oop, которое увеличивает переменную self.count каждую секунду, а в GUI, если вы нажмете кнопку, будет напечатано это число.
Приложение:
# app.py
from server import Server
from gui import GUI
class App:
def __init__(self):
self.gui = GUI()
self.server = Server()
self.link_parts()
def link_parts(self):
self.server.link_with_gui(self.gui)
self.gui.link_with_server(self.server)
def main():
app = App()
app.gui.mainloop()
if __name__ == '__main__':
main()
Сервер:
# server.py
import threading
import time
class Server:
def __init__(self):
self.count = 0
thread = threading.Thread(target=self.counter)
thread.daemon = True
thread.start()
def link_with_gui(self, gui):
self.gui = gui
def display(self):
self.gui.chat_text.delete("1.0", "end")
self.gui.chat_text.insert("insert", "This is Server count : {}".format(self.count))
def counter(self):
while True:
self.count += 1
time.sleep(1)
print("self.count", self.count)
if __name__ == '__main__':
server = Server()
time.sleep(4)
GUI:
# gui.py
import tkinter as tk
class GUI(tk.Tk): # Graphic User Interface
def __init__(self):
super().__init__()
self.btn = tk.Button(master=self, text="Click Me")
self.btn.pack()
self.chat_text = tk.Text(self, width=20, height=3)
self.chat_text.pack()
def link_with_server(self, server):
self.server = server
self.btn.configure(command=self.server.display)
if __name__ == '__main__':
gui = GUI()
gui.mainloop()