from importlib.metadata import always_iterable from queue import Queue from PySide6.QtCore import QObject, SignalInstance from PySide6.QtCore import Signal, Slot from PySide6.QtNetwork import QTcpSocket from socket_client import SocketClient import random import string from message_proxy import MessageProxy, SignalProxy class ParamsService(QObject): # signal_busy: SignalInstance = Signal() signal_request_complete: SignalInstance = Signal(SignalProxy) def __init__(self, host, port): super().__init__() # 初始化socket client self.__busy = False # self.client = SocketClient("127.0.0.1", 1234) self.queue = Queue # 创建一个 TCP Socket 对象 self.socket = QTcpSocket(self) self.host = host self.port = port # 连接信号 self.socket.connected.connect(self.on_connected) self.socket.readyRead.connect(self.on_ready_read) self.socket.disconnected.connect(self.on_disconnected) # 连接到服务器 self.socket.connectToHost(self.host, self.port) @Slot() def on_connected(self): print(f"Connected to {self.host}:{self.port}") # self.socket.write(b"Hello, Server!") # 向服务器发送数据 # print("Message sent to server.") @Slot() def on_ready_read(self): data = self.socket.readAll() # 读取服务器发送的数据 print(f"Received from server: {data.data().decode()}") @Slot() def on_disconnected(self): print("Disconnected from server.") self.socket.close() # 关闭连接 def send_data(self, data: bytes): self.socket.write(data) @staticmethod def generate_token(): token_str = ''.join(random.choices(string.ascii_letters + string.digits, k=12)) return token_str def get_params(self, widget_proxy: QObject): # 生成一个请求 token = self.generate_token() data = { "hello world!"} message = MessageProxy(token, widget_proxy, data) # 发送请求 # 将发送的请求放入一个队列 pass print('请求数据') self.signal_request_complete.emit(SignalProxy(widget_proxy, {"str1": "test 1", "str2": 100 })) def set_params(self): pass import sys from PySide6.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout class MyComponent: def __init__(self, parent=None): pass def set_data(self, data): pass class MyWidget(QWidget, MyComponent): def __init__(self, parent=None): super().__init__(parent=parent) layout = QVBoxLayout() self.label1 = QLabel('Test Info 1', self) self.label2 = QLabel('Test Info 2', self) layout.addWidget(self.label1) layout.addWidget(self.label2) self.setLayout(layout) def set_data(self, data): self.label1.setText(data["str1"]) self.label2.setText(str(data["str2"])) class MyWindow(QWidget): def __init__(self): super().__init__() # 设置窗口标题和尺寸 self.setWindowTitle("PySide6 Example") self.setFixedSize(300, 800) self.test_widget1 = MyWidget(self) self.test_widget2 = MyWidget(self) self.test_widget3 = MyWidget(self) self.test_widget4 = MyWidget(self) self.test_widget5 = MyWidget(self) self.test_widget6 = MyWidget(self) self.test_widget7 = MyWidget(self) self.test_widget8 = MyWidget(self) self.test_widget9 = MyWidget(self) # 创建 QLabel、QLineEdit 和 QPushButton 控件 self.label = QLabel("请输入内容:", self) self.input_line = QLineEdit(self) self.button = QPushButton("更新标签", self) # 设置按钮点击事件 self.button.clicked.connect(self.on_button_clicked) # 创建垂直布局并添加控件 layout = QVBoxLayout() layout.addWidget(self.test_widget1) layout.addWidget(self.test_widget2) layout.addWidget(self.test_widget3) layout.addWidget(self.test_widget4) layout.addWidget(self.test_widget5) layout.addWidget(self.test_widget6) layout.addWidget(self.test_widget7) layout.addWidget(self.test_widget8) layout.addWidget(self.test_widget9) layout.addWidget(self.label) layout.addWidget(self.input_line) layout.addWidget(self.button) # 设置窗口的布局 self.setLayout(layout) self.params_service = ParamsService("127.0.0.1", 1234) self.params_service.signal_request_complete.connect(self.on_params_service) def on_params_service(self, data: SignalProxy): data.widget.set_data(data.data) def on_button_clicked(self): self.params_service.get_params(self.test_widget1) self.params_service.get_params(self.test_widget2) self.params_service.get_params(self.test_widget3) self.params_service.get_params(self.test_widget4) self.params_service.get_params(self.test_widget5) self.params_service.get_params(self.test_widget6) self.params_service.get_params(self.test_widget7) self.params_service.get_params(self.test_widget8) self.params_service.get_params(self.test_widget9) # def update_label(self): # # 获取输入框的文本并更新标签内容 # input_text = self.input_line.text() # self.label.setText(f"你输入的是:{input_text}") if __name__ == "__main__": app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec())