Код: Выделить всё
class chat(tk.Frame):
last_recived_messege=None
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
imgpath = "C:/cyberproject/pic/pic11.png" # Make sure the path is correct
self.background_image = tk.PhotoImage(file=imgpath)
bg_label = tk.Label(self, image=self.background_image)
bg_label.place(x=0, y=0, relwidth=1, relheight=1) # Set the label size to match the frame size
tk.Label(self, text='Enter Your Name Here! ', font=("arial", 13, "bold")).pack()
self.name_widget = tk.Entry(self, width=20, font=("arial", 13))
self.name_widget.pack()
tk.Button(self, text="Join", width=10, command=self.on_join).pack()
tk.Label(self, text='Enter Your Message Here!', font=("arial", 20, "bold")).pack()
self.enter_text_widget = tk.Text(self, width=50, height=10, font=("arial", 12))
self.enter_text_widget.pack()
self.enter_text_widget.bind('', self.on_enter_key_pressed)
tk.Label(self, text='Chat Box', font=("arial", 12, "bold")).pack()
self.chat_transcript_area = tk.Text(self, width=60, height=10, font=("arial", 12))
scrollbar = tk.Scrollbar(self, command=self.chat_transcript_area.yview, orient=tk.VERTICAL)
self.chat_transcript_area.config(yscrollcommand=scrollbar.set)
self.chat_transcript_area.bind('', lambda e: 'break')
self.chat_transcript_area.pack()
scrollbar.pack()
back_button = ttk.Button(self, text="Go Back To Main Menu", command=self.go_back_to_main_menu,
style="Green.TButton")
back_button.place(x=3, y=3)
# self.listen_for_incoming_messages_in_a_thread()
def on_join(self):
if len(self.name_widget.get()) == 0:
messagebox.showerror(
"Enter your name", "Enter your name to send a message")
return
self.name_widget.config(state='disabled')
myclient.send_to_server_chat(("joined:" + self.name_widget.get()).encode('utf-8'))
self.start_listening()
def on_enter_key_pressed(self, event):
if len(self.name_widget.get()) == 0:
messagebox.showerror("Enter your name", "Enter your name to send a message")
return
self.send_chat()
# def listen_for_incoming_messages_in_a_thread(self):
# thread = threading.Thread(target=self.receive_message_from_server,args=(None,)) # Create a thread for the send and receive in same time
# thread.start()
def start_listening(self):
# Start listening for incoming messages in a separate thread
thread = threading.Thread(target=self.receive_message_from_server)
thread.start()
# function to recieve msg
def receive_message_from_server(self):
while True:
buffer = myclient.recive_from_server_chat()
if not buffer:
break
message = buffer.decode('utf-8')
if "joined" in message:
user = message.split(":")[1]
message = user + " has joined"
self.chat_transcript_area.insert('end', message + '\n')
self.chat_transcript_area.yview(END)
else:
self.chat_transcript_area.insert('end', message + '\n')
self.chat_transcript_area.yview(END)
myclient.client_socket.close()
def send_chat(self):
senders_name = self.name_widget.get().strip() + ": "
data = self.enter_text_widget.get(1.0, 'end').strip()
message = (senders_name + data).encode('utf-8')
self.chat_transcript_area.insert('end', message.decode('utf-8') + '\n')
self.enter_text_widget.delete(1.0, "end")
self.chat_transcript_area.yview(END)
msg = message.decode('utf-8')
myclient.send_to_server(msg, '3')
self.enter_text_widget.delete(1.0, "end")
return 'break'
def go_back_to_main_menu(self):
self.controller.show_frame(main_menu)
Подробнее здесь: https://stackoverflow.com/questions/783 ... -run-again