Browse Source

修改 receiver.py 文件,使用 tkinter 显示从 RabbitMQ 接收到的文件名

zhong (钟鹏群) 1 tháng trước cách đây
mục cha
commit
5560c2e1c3
1 tập tin đã thay đổi với 101 bổ sung0 xóa
  1. 101 0
      src/receiver.py

+ 101 - 0
src/receiver.py

@@ -0,0 +1,101 @@
+import pika
+import tkinter as tk
+from tkinter import ttk
+import threading
+
+# RabbitMQ 配置
+RABBITMQ_HOST = '101.201.78.54'
+RABBITMQ_PORT = 5672
+RABBITMQ_QUEUE = 'file_matches'
+RABBITMQ_USERNAME = 'admin'  # RabbitMQ 用户名
+RABBITMQ_PASSWORD = 'zpq123456'  # RabbitMQ 密码
+
+class RabbitMQReceiver:
+    """RabbitMQ 消息接收器"""
+    def __init__(self, root):
+        self.root = root
+        self.root.title("RabbitMQ 消息接收器")
+        self.root.geometry("400x300")
+        
+        # 创建主框架
+        self.main_frame = ttk.Frame(root, padding="10")
+        self.main_frame.pack(fill=tk.BOTH, expand=True)
+        
+        # 创建标题
+        self.title_label = ttk.Label(self.main_frame, text="接收到的文件名称", font=('Arial', 12, 'bold'))
+        self.title_label.pack(pady=10)
+        
+        # 创建消息列表框
+        self.message_list = tk.Listbox(self.main_frame, width=50, height=15)
+        self.message_list.pack(fill=tk.BOTH, expand=True, pady=5)
+        
+        # 创建滚动条
+        self.scrollbar = ttk.Scrollbar(self.message_list, orient=tk.VERTICAL, command=self.message_list.yview)
+        self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
+        self.message_list.config(yscrollcommand=self.scrollbar.set)
+        
+        # 创建状态标签
+        self.status_var = tk.StringVar()
+        self.status_var.set(f"等待接收消息... (队列: {RABBITMQ_QUEUE})")
+        self.status_label = ttk.Label(self.main_frame, textvariable=self.status_var, font=('Arial', 10))
+        self.status_label.pack(pady=10)
+        
+        # 启动 RabbitMQ 接收线程
+        self.receive_thread = threading.Thread(target=self.receive_messages, daemon=True)
+        self.receive_thread.start()
+    
+    def callback(self, ch, method, properties, body):
+        """处理接收到的消息"""
+        try:
+            # 解码消息
+            file_name = body.decode('utf-8')
+            # 在主线程中更新 UI
+            self.root.after(0, self.update_message_list, file_name)
+        except Exception as e:
+            self.root.after(0, self.update_message_list, f"处理消息时出错: {e}")
+    
+    def update_message_list(self, message):
+        """更新消息列表"""
+        self.message_list.insert(tk.END, message)
+        # 自动滚动到最后一行
+        self.message_list.see(tk.END)
+    
+    def receive_messages(self):
+        """接收 RabbitMQ 消息"""
+        try:
+            # 建立连接
+            credentials = pika.PlainCredentials(RABBITMQ_USERNAME, RABBITMQ_PASSWORD)
+            connection = pika.BlockingConnection(pika.ConnectionParameters(
+                host=RABBITMQ_HOST, port=RABBITMQ_PORT, credentials=credentials
+            ))
+            channel = connection.channel()
+            
+            # 声明队列
+            channel.queue_declare(queue=RABBITMQ_QUEUE, durable=True)
+            
+            # 注册回调函数
+            channel.basic_consume(queue=RABBITMQ_QUEUE, on_message_callback=self.callback, auto_ack=True)
+            
+            self.root.after(0, self.status_var.set, f"正在接收消息... (队列: {RABBITMQ_QUEUE})")
+            
+            # 开始消费消息
+            channel.start_consuming()
+        except Exception as e:
+            error_message = f"连接到 RabbitMQ 失败: {e}"
+            self.root.after(0, self.status_var.set, error_message)
+            self.root.after(0, self.update_message_list, error_message)
+        finally:
+            if 'connection' in locals() and connection.is_open:
+                connection.close()
+
+def main():
+    """主函数"""
+    # 创建 tkinter 根窗口
+    root = tk.Tk()
+    # 创建 RabbitMQ 接收器
+    receiver = RabbitMQReceiver(root)
+    # 启动 tkinter 主循环
+    root.mainloop()
+
+if __name__ == "__main__":
+    main()