Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Мессенджер на Tkinter Python

Арсений Машилов Ученик (132), на голосовании 1 неделю назад
Как думаете возможно ли создать мессенджер на Tkinter Python? Если да, но на сколько хороший по мощности и визуальному оформлению? А так же возможно ли сделать онлайн?
Голосование за лучший ответ
Рустам Абдрашитов Мыслитель (9542) 1 месяц назад
 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()
Похожие вопросы