Как подружить сервер на python и tkinter?
Есть вот такой сервер:
import socket
import time
host = socket.gethostbyname(socket.gethostname())
port = 9090
print("Server IP:", host)
print("Server Port:", port)
clients = []
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
print("Server Started")
while True:
try:
# Получаем сообщение клиента
data, addr = s.recvfrom(4096)
print("Client", addr[0], "|", addr[1], "connected")
if addr not in clients:
clients.append(addr)
itsatime = time.strftime("%Y-%m-%d-%H.%M.%S", time.localtime())
print("[" + addr[0] + "]=[" + str(addr[1]) + "]=[" + itsatime + "]/", end="")
msg = data.decode("utf-8")
print(msg)
for client in clients:
if addr != client:
s.sendto(data, client)
else:
if "=>" not in data.decode("utf-8"):
s.sendto("\ndelivered\n".encode("utf-8"), client)
except:
pass
# print("\n[ Server Stopped ]")
# quit = True
Он не бог весть какой, но работает и принимает сообщения от клиентов. Я хочу сделать для него простой интерфейс в tkinter. Есть вот такой вот код прототипа оболочки:
import tkinter as tk
# Зададим параметры главного окна
root = tk.Tk()
root.geometry("650x350")
root.resizable(0, 0)
x = (root.winfo_screenwidth() / 1.1 - root.winfo_reqwidth()) / 2
y = (root.winfo_screenheight() / 1.25 - root.winfo_reqheight()) / 2
root.wm_geometry("+%d+%d" % (x, y))
root.title("СЕРВЕР")
# Создадим текстовое поле сервера
srv_txt = tk.Text(width=40, height=19, wrap=tk.WORD)
srv_txt.place(x=10, y=25)
# print("Server Started")
root.mainloop()
Я бы хотел, чтобы то, что печатает сервер, например сообщения от клиента:
msg = data.decode("utf-8")
print(msg)
попадали в текстовый виджет графической оболочки (srv_txt). То есть чтобы то, что принял сервер, отобразилось в графической оболочке.
Либо, в идеале, объединить оба кода так, чтобы сервер просто сразу был с графическим интерфейсом.
Но мне не хватает знаний, чтобы понять, как это сделать. Подскажите, пожалуйста, как бы эту задачу можно было б решить