183 lines
5.6 KiB
Python
183 lines
5.6 KiB
Python
![]() |
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())
|
||
|
|
||
|
|