PyQt6 和 PyQt5 的差异

PyQt6 和 PyQt5 的差异

PyQt6 是 PyQt5 的下一个版本,但两个版本的写法基本上其实大同小异,这篇教学会介绍 PyQt6 和 PyQt5 有何差异。

快速预览:

  • .exec_() 改为 .exec()

  • 方法的位置或名称改变

  • 不需要高 DPI 缩放属性

  • 支援 Qt的资源

  • 特定平台

  • 其他细节差异

PyQt6 教学 - PyQt6 和 PyQt5 的差异

.exec_() 改为 .exec()

在 Python 2.7 中,exec 是一个保留字,使用者不可将这个字作为变数、函数或方法的名称的字,在 PyQt 的早期版本中,该方法被重命名为 ,并在后面加上底线避免命名衝突。然而在 Python 3.0 之后的版本删除了 exec 关键字,也由于 PyQt6 只支援 Python 3.x 的版本,所以就将 改为 。.exec_()``.exec_()``.exec()

方法的位置或名称改变

PyQt6 针对各个种类的 Enums 位置进行重大的改变。所有的 Enums 被归类到标准 Python 的 Enum 类裡作为子类别,并需要全名才能使用,下方列出 PyQt5 和 PyQt6 在使用上的差异。

函式库安装

PyQt5PyQt6
pip install PyQtWebEnginepip install PyQt6-WebEngine

数值调整滑杆

PyQt5PyQt6
QtWidgets.QLineEdit.PasswordQtWidgets.QLineEdit.EchoMode.Password
设置方向(1)setOrientation(QtCore.Qt.Orientation.Horizontal)
设置方向(2)setOrientation(QtCore.Qt.Orientation.Vertical)
QSlider.TicksAboveQSlider.TickPosition.TicksAbove
QSlider.Ticks下面QSlider.TickPosition.TicksUnder
QSlider.TicksBothSidesQSlider.TickPosition.TicksBothSides
QSlider.TicksLeftQSlider.TickPosition.TicksLeft
QSlider.TicksRightQSlider.TickPosition.TicksRight

消息档案对话窗口

PyQt5PyQt6
QMessageBox.informationQMessageBox.Icon.Information
QMessageBox.WarningQMessageBox.Icon.Warning
QMessageBox.CriticalQMessageBox.Icon.Critical
QMessageBox.QuestionQMessageBox.Icon.Question
QMessageBox.QuestionQMessageBox.Icon.Question
QMessageBox.OkQMessageBox.StandardButton.Ok
QMessageBox.OpenQMessageBox.StandardButton.Open
QMessageBox.SaveQMessageBox.StandardButton.Save
QMessageBox.CancelQMessageBox.StandardButton.Cancel
QMessageBox.CloseQMessageBox.StandardButton.Close
QMessageBox.DiscardQMessageBox.StandardButton.Discard
QMessageBox.ApplyQMessageBox.StandardButton.Apply

画笔和颜色

PyQt5PyQt6
QtWidgets.QActionQtGui.QAction
QFont.Style斜体QFont.Style.Style斜体
Qt.DotLineQt.PenStyle.DotLine
Qt.FlatCapQt.PenCapStyle.FlatCap
Qt.Miter加入Qt.PenJoinStyle.MiterJoin
QImage.Format_RGB888QImage.Format.Format_RGB888

对齐相关

PyQt5PyQt6
QtCore.Qt.AlignLeftQtCore.Qt.AlignmentFlag.AlignLeft
QtCore.Qt.AlignCenterQtCore.Qt.AlignmentFlag.AlignCenter
QtCore.Qt.AlignRightQtCore.Qt.AlignmentFlag.AlignRight
QtCore.Qt.AlignTopQtCore.Qt.AlignmentFlag.AlignTop
QtCore.Qt.AlignBottomQtCore.Qt.AlignmentFlag.AlignBottom
QtWidgets.QListView.TopToBottomQtWidgets.QListView.Flow.TopToBottom
QtWidgets.QListView.LeftToRightQtWidgets.QListView.Flow.LeftToRight

布局

PyQt5PyQt6
QtCore.Qt.AlignRightQtCore.Qt.AlignmentFlag.AlignRight
QtCore.Qt.AlignVCenterQtCore.Qt.AlignmentFlag.AlignVCenter
QtCore.Qt.AlignHCenterQtCore.Qt.AlignmentFlag.AlignHCenter
QtWidgets.QFormLayout.DontWrapRowsQtWidgets.QFormLayout.RowWrapPolicy.DontWrapRows
QtWidgets.QFormLayout.WrapLongRowsQtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows
QtWidgets.QFormLayout.WrapAllRowsQtWidgets.QFormLayout.RowWrapPolicy.WrapAllRows

鼠标、键盘与窗口

PyQt5PyQt6
QMouseEvent.x()QEnterEvent.position(event).x()
QMouseEvent.y()QEnterEvent.position(event).y()
QMouseEvent.globalX()QEnterEvent.globalPosition(event).x()
QMouseEvent.globalY()QEnterEvent.globalPosition(event).y()
QMouseEvent.button()QEnterEvent.button(event)
QMouseEvent.timestamp()QEnterEvent.timestamp(event)
QtWidgets.QShortcutQtGui.QShortcut
Qt.已检查Qt.CheckState.Checked
QtWidgets.width()QtWidgets.QApplication.screens()[0].size().width()
QtWidgets.height()QtWidgets.QApplication.screens()[0].size().height()

不需要高 DPI 缩放属性

因为高 DPI 是 PyQt6 的预设设定,因此不需要再使用下列高 DPI 缩放属性的设定。

Qt.AA_EnableHighDpiScaling
Qt.AA_DisableHighDpiScaling
Qt.AA_UseHighDpiPixmaps

不支援 Qt的资源

PyQt6 已经不再支援 Qt 资源框架 ( Qt's resource ),如果要将程式码和资源打包成应用程式,可以使用 PyInstaller 进行打包作业。

特定平台

PyQt6 弃用了 QtWin 和 QtMac 模组中支援特定平台的方法,转而使用本机调用。

QtWin:

try:
    # Include in try/except block if you're also targeting Mac/Linux
    from PyQt5.QtWinExtras import QtWin
    myappid = 'com.learnpyqt.examples.helloworld'
    QtWin.setCurrentProcessExplicitAppUserModelID(myappid)
except ImportError:
    pass

本地:

try:
    # Include in try/except block if you're also targeting Mac/Linux
    from ctypes import windll  # Only exists on Windows.
    myappid = 'mycompany.myproduct.subproduct.version'
    windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
except ImportError:
    pass

其他细节差异

  • QDesktopWidget 已经被移除,使用 QScreen 代替 ( 可以使用 , ,或 )。QWidget.screen() QGuiApplication.primaryScreen() QGuiApplication.screens()

  • QFontMetrics的.width()已重命名为 。horizontaladvance()

  • Qt.MidButton已重命名为 。Qt.MiddleButton

  • QRegExp 改为 QRegularExpression。

  • 推荐使用 QOpenGLVersionFunctionsFactory() 的 而不是 QOpenGLContext() 的。.get()

  • QWidget.mapToGlobal()和 返回一个 QPoinF 对象。QWidget.mapFromGlobal()

     

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5PyQt6是Python中用于创建图形用户界面的库。PyQt6是PyQt5的升级版本,有一些注意事项需要考虑。首先,对于一些程序,只需将`import pyqt5`重命名为`import pyqt6`即可让程序在新版本中运行。但在大多数情况下,还需要考虑PyQtQt本身的变化。在升级到PyQt6时,可能需要进行一些代码调整,例如使用`.exec()`来代替以前的方式。此外,还需要注意保持PythonPyQt6和PyQt6-Qt6之间的版本一致性。如果您正在开发同时针对PyQt5PyQt6的软件,可以使用条件导入来从加载的模块中导入类,以确保在不同版本之间的兼容性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Pyqt5升级至Pyqt6:升级优势、差异与注意事项 详细总结](https://blog.csdn.net/Xuange_Aha/article/details/128560116)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [pyqt5pyqt6需要注意的事项](https://blog.csdn.net/u010501845/article/details/122651371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值