使用python语言实现Tkinter 图形聊天界面,基于UDP协议实现两台在线聊天,给出完整的实例源代码,且提示或者注释部分用中文。
时间: 2024-02-19 16:01:03 浏览: 52
好的,以下是一份完整的示例代码,它演示了如何使用Python和Tkinter创建一个简单的图形聊天界面,并使用UDP协议在两个计算机之间进行在线聊天:
```python
import tkinter as tk
import socket
import threading
# 创建UDP Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定端口
sock.bind(('localhost', 8000))
class ChatWindow:
def __init__(self, master, title, sendto):
self.master = master
self.master.title(title)
self.sendto = sendto
# 创建聊天记录框
self.message_frame = tk.Frame(self.master)
self.scrollbar = tk.Scrollbar(self.message_frame)
self.message_list = tk.Listbox(self.message_frame, width=50, height=20, yscrollcommand=self.scrollbar.set)
self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
self.message_list.pack(side=tk.LEFT, fill=tk.BOTH)
self.message_frame.pack()
# 创建消息输入框和发送按钮
self.message_entry = tk.Entry(self.master, width=50)
self.message_entry.pack()
self.send_button = tk.Button(self.master, text='发送', command=self.send_message)
self.send_button.pack()
# 启动接收消息的线程
self.receive_thread = threading.Thread(target=self.receive_message)
self.receive_thread.start()
def send_message(self):
message = self.message_entry.get()
# 发送消息到对方机器
sock.sendto(message.encode('utf-8'), self.sendto)
self.message_list.insert(tk.END, '我:' + message)
self.message_entry.delete(0, tk.END)
def receive_message(self):
while True:
# 接收消息
data, addr = sock.recvfrom(1024)
message = data.decode('utf-8')
self.message_list.insert(tk.END, '对方:' + message)
def run(self):
self.master.mainloop()
if __name__ == '__main__':
# 创建聊天窗口1
window1 = tk.Tk()
chat_window1 = ChatWindow(window1, '聊天窗口1', ('localhost', 8001))
# 创建聊天窗口2
window2 = tk.Tk()
chat_window2 = ChatWindow(window2, '聊天窗口2', ('localhost', 8000))
# 启动两个窗口的消息循环
threading.Thread(target=chat_window1.run).start()
threading.Thread(target=chat_window2.run).start()
```
这段代码创建了一个ChatWindow类,用于管理聊天窗口的各个组件和消息收发。它在构造函数中接受一个主窗口对象、窗口标题和要发送消息的目标地址。它使用Tkinter创建了消息列表、消息输入框和发送按钮,并启动了一个线程来接收来自对方机器的消息。当用户在消息输入框中输入消息并点击发送按钮时,它会将消息发送到对方机器,并将其添加到消息列表中。
在主程序中,我们创建了两个ChatWindow实例,分别表示两台计算机上的聊天窗口。我们使用Python的多线程功能启动两个窗口的消息循环,以便它们可以同时运行。在这个示例中,我们将第一个聊天窗口的目标地址设置为('localhost',8001),将第二个聊天窗口的目标地址设置为('localhost',8000)。这意味着第一个窗口将向8001端口发送消息,而第二个窗口将从8001端口接收消息。
希望这个示例对你有所帮助!
阅读全文