当前位置: 首页 > wzjs >正文

人工做流量的网站廊坊网站建设公司

人工做流量的网站,廊坊网站建设公司,苏州vr全景网站建设公司,中国十大最强装饰公司PyQt5 到 PySide6 技术栈转换详解 本项目最初使用 PyQt5 构建图形用户界面 (all_sensors_reader.py)。为了探索不同的 Qt for Python 绑定库,并利用 PySide6 可能带来的一些优势(例如更宽松的 LGPL 许可证),我们创建了一个功能相…

PyQt5 到 PySide6 技术栈转换详解

本项目最初使用 PyQt5 构建图形用户界面 (all_sensors_reader.py)。为了探索不同的 Qt for Python 绑定库,并利用 PySide6 可能带来的一些优势(例如更宽松的 LGPL 许可证),我们创建了一个功能相同但基于 PySide6 的版本 (all_sensors_reader_pyside.py)。
在这里插入图片描述

本文档详细介绍了从 PyQt5 迁移到 PySide6 的主要差异和修改点,并以本项目中的代码为例进行说明。

1. 包导入 (Package Imports)

最明显的变化是包名需从 PyQt5 替换为 PySide6

PyQt5 (all_sensors_reader.py):

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,QHBoxLayout, QLabel, QPushButton, QComboBox,QGroupBox, QGridLayout, QTableWidget, QTableWidgetItem,QHeaderView, QMessageBox, QSplitter)
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QFont
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

PySide6 (all_sensors_reader_pyside.py):

import sys
from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,QHBoxLayout, QLabel, QPushButton, QComboBox,QGroupBox, QGridLayout, QTableWidget, QTableWidgetItem,QHeaderView, QMessageBox, QSplitter)
from PySide6.QtCore import Qt, QTimer, Slot
from PySide6.QtGui import QFont
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas

主要修改: 将所有 PyQt5 替换为 PySide6,并根据需要导入 Slot

2. 信号和槽 (Signals and Slots)

信号连接方式在两者中一致,但 PySide6 推荐使用 @Slot() 装饰器标记槽函数,以提高可读性和类型安全性。

PyQt5 (all_sensors_reader.py):

class AllSensorsApp(QMainWindow):def __init__(self):self.refresh_button.clicked.connect(self.refresh_ports)self.connect_button.clicked.connect(self.connect_device)self.disconnect_button.clicked.connect(self.disconnect_device)self.auto_refresh_combo.currentIndexChanged.connect(self.set_auto_refresh)self.manual_refresh_button.clicked.connect(self.update_data)def refresh_ports(self):passdef connect_device(self):passdef set_auto_refresh(self, index):passdef update_data(self):pass

PySide6 (all_sensors_reader_pyside.py):

from PySide6.QtCore import Slotclass AllSensorsApp(QMainWindow):def __init__(self):self.refresh_button.clicked.connect(self.refresh_ports)self.connect_button.clicked.connect(self.connect_device)self.disconnect_button.clicked.connect(self.disconnect_device)self.auto_refresh_combo.currentIndexChanged.connect(self.set_auto_refresh)self.manual_refresh_button.clicked.connect(self.update_data)@Slot()def refresh_ports(self):pass@Slot()def connect_device(self):pass@Slot(int)def set_auto_refresh(self, index):pass@Slot()def update_data(self):pass

主要修改: 添加 @Slot() 装饰器,并为需要参数的槽函数指定类型(如 @Slot(int))。

3. 枚举 (Enums)

PySide6 对枚举访问路径要求更明确。

PyQt5 (all_sensors_reader.py):

splitter = QSplitter(Qt.Horizontal)
self.telemetry_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch)
self.telemetry_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch)
self.telemetry_table.setEditTriggers(QTableWidget.NoEditTriggers)

PySide6 (all_sensors_reader_pyside.py):

splitter = QSplitter(Qt.Orientation.Horizontal)
self.telemetry_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch)
self.telemetry_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
self.telemetry_table.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers)

主要修改:

  • Qt.Horizontal -> Qt.Orientation.Horizontal
  • QHeaderView.Stretch -> QHeaderView.ResizeMode.Stretch
  • QTableWidget.NoEditTriggers -> QTableWidget.EditTrigger.NoEditTriggers

4. Matplotlib 后端 (Matplotlib Backend)

Matplotlib 后端需调整以兼容 PySide6。

PyQt5 (all_sensors_reader.py):

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

PySide6 (all_sensors_reader_pyside.py):

from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas

主要修改: 使用通用后端 backend_qtagg,兼容多种 Qt 绑定。

5. 应用程序执行 (exec_() vs exec())

主事件循环方法名有所不同。

PyQt5 (all_sensors_reader.py):

if __name__ == '__main__':app = QApplication(sys.argv)mainWin = AllSensorsApp()mainWin.show()sys.exit(app.exec_())

PySide6 (all_sensors_reader_pyside.py):

def main_gui():app = QApplication(sys.argv)mainWin = AllSensorsApp()mainWin.show()sys.exit(app.exec())if __name__ == '__main__':main_gui()

主要修改: app.exec_() 改为 app.exec(),符合 Python 3 的命名规范。

总结

从 PyQt5 到 PySide6 的迁移主要涉及包名替换、信号槽装饰器调整、枚举路径更新、Matplotlib 后端更换及 exec() 方法修改。两者的功能和性能差异不大,PySide6 的 LGPL 许可证为其在商业场景中提供了优势。

http://www.dtcms.com/wzjs/146071.html

相关文章:

  • 建站公司 phpwind最近的新闻热点
  • 长沙seo网站建设费用教育培训网站大全
  • 网站建设的软件介绍推广普通话宣传语
  • 网站建设服务电话win7优化极致性能
  • 百事通网做网站上海怎么做seo推广
  • 深圳专业做网站的公司有哪些网站安全检测
  • 泰兴住房和城乡建设厅网站山东今日热搜
  • 做网站ps的图片抖音营销推广怎么做
  • 做房产网站多少钱seo关键词优化怎么收费
  • 创建网站天津百度推广公司电话
  • 怎么做1688网站sem推广竞价托管
  • 网站设计美工要怎么做友情链接如何交换
  • 做网站有骗子理发美发培训学校
  • 关于公司网站建设的若干意见免费关键词优化排名软件
  • 开平网站建设公司关键词排名软件官网
  • 把域名解析到其他网站的ip地址叫太原网站优化公司
  • html网站简易模板海外社交媒体营销
  • 无锡网站App微信网站整站优化
  • 做网站建设公司赚钱今日十大热点新闻
  • 项目网站建设方案池州网络推广
  • 网站问卷调查怎么做手机百度一下百度
  • 网站怎么做 流程图常州百度推广代理
  • 工程做网站百度指数怎么查询
  • 直播类网站怎么做qq群引流推广网站
  • 网站开发定制案例展示旺道seo工具
  • 做网站优化的话术搭建网站教程
  • 成都网站建设公司地址免费b站推广网站不
  • 佛山厂家关键词网络推广深圳网络优化seo
  • 做课件的网站有哪些广告传媒公司
  • 潍坊做网站的公司网站设计公司多少钱