import socket
import threading
import tkinter as tk
from tkinter import messagebox
def receive_messages():
while True:
try:
msg = client_socket.recv(1024).decode('utf-8')
if msg:
msg_list.insert(tk.END, msg)
else:
break
except Exception as e:
print("Ошибка при получении сообщения:", e)
break
def send_message(event=None):
msg = my_msg.get()
if msg: # Проверяем, что сообщение не пустое
my_msg.set("")
try:
client_socket.send(bytes(msg, "utf-8"))
except Exception as e:
print("Ошибка при отправке сообщения:", e)
def on_closing():
client_socket.close()
top.destroy()
# Настройка клиентского сокета
try:
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 12345)) # Укажите адрес сервера
except Exception as e:
messagebox.showerror("Ошибка подключения", f"Не удалось подключиться к серверу: {e}")
exit()
# Настройка GUI
top = tk.Tk()
top.title("TkMessenger")
messages_frame = tk.Frame(top)
my_msg = tk.StringVar()
my_msg.set("Введите ваше сообщение здесь.")
scrollbar = tk.Scrollbar(messages_frame)
msg_list = tk.Listbox(messages_frame, height=15, width=50, yscrollcommand=scrollbar.set)
scrollbar.config(command=msg_list.yview) # Привязка скроллбара к списку сообщений
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
msg_list.pack(side=tk.LEFT, fill=tk.BOTH)
messages_frame.pack()
entry_field = tk.Entry(top, textvariable=my_msg)
entry_field.bind("<Return>", send_message)
entry_field.pack()
send_button = tk.Button(top, text="Отправить", command=send_message)
send_button.pack()
# Запуск потока для получения сообщений
threading.Thread(target=receive_messages, daemon=True).start() # Установка потока как демона
top.protocol("WM_DELETE_WINDOW", on_closing) # Обработка закрытия окна
top.mainloop()