設為首頁收藏本站

艾歐踢論壇

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

搜索
熱搜: 活動 交友 discuz
查看: 341|回復: 0
打印 上一主題 下一主題

PyQt6 和 PyQt5 的差異

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2023-3-31 23:57:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
.exec_() 改為 .exec()

在 Python 2.7 中,exec 是一個保留字,使用者不可將這個字作為變數、函數或方法的名稱的字,在 PyQt 的早期版本中,該方法被重命名為 .exec_(),並在後面加上底線避免命名衝突。然而在 Python 3.0 之後的版本刪除了 exec 關鍵字,也由於 PyQt6 只支援 Python 3.x 的版本,所以就將 .exec_() 改為 .exec()。
方法的位置或名稱改變

PyQt6 針對各個種類的 Enums 位置進行重大的改變。所有的 Enums 被歸類到標準 Python 的 Enum 類裡作為子類別,並需要全名才能使用,下方列出 PyQt5 和 PyQt6 在使用上的差異。

函式庫安裝
PyQt5         PyQt6
pip install PyQtWebEngine         pip install PyQt6-WebEngine

數值調整滑桿
PyQt5         PyQt6
QtWidgets.QLineEdit.Password         QtWidgets.QLineEdit.EchoMode.Password
setOrientation(1)         setOrientation(QtCore.Qt.Orientation.Horizontal)
setOrientation(2)         setOrientation(QtCore.Qt.Orientation.Vertical)
QSlider.TicksAbove         QSlider.TickPosition.TicksAbove
QSlider.TicksBelow         QSlider.TickPosition.TicksBelow
QSlider.TicksBothSides         QSlider.TickPosition.TicksBothSides
QSlider.TicksLeft         QSlider.TickPosition.TicksLeft
QSlider.TicksRight         QSlider.TickPosition.TicksRight

訊息檔案對話視窗
PyQt5         PyQt6
QMessageBox.Information         QMessageBox.Icon.Information
QMessageBox.Warning         QMessageBox.Icon.Warning
QMessageBox.Critical         QMessageBox.Icon.Critical
QMessageBox.Question         QMessageBox.Icon.Question
QMessageBox.Question         QMessageBox.Icon.Question
QMessageBox.Ok         QMessageBox.StandardButton.Ok
QMessageBox.Open         QMessageBox.StandardButton.Open
QMessageBox.Save         QMessageBox.StandardButton.Save
QMessageBox.Cancel         QMessageBox.StandardButton.Cancel
QMessageBox.Close         QMessageBox.StandardButton.Close
QMessageBox.Discard         QMessageBox.StandardButton.Discard
QMessageBox.Apply         QMessageBox.StandardButton.Apply

畫筆和顏色
PyQt5         PyQt6
QtWidgets.QAction         QtGui.QAction
QFont.StyleItalic         QFont.Style.StyleItalic
Qt.DotLine         Qt.PenStyle.DotLine
Qt.FlatCap         Qt.PenCapStyle.FlatCap
Qt.MiterJoin         Qt.PenJoinStyle.MiterJoin
QImage.Format_RGB888         QImage.Format.Format_RGB888

對齊相關
PyQt5         PyQt6
QtCore.Qt.AlignLeft         QtCore.Qt.AlignmentFlag.AlignLeft
QtCore.Qt.AlignCenter         QtCore.Qt.AlignmentFlag.AlignCenter
QtCore.Qt.AlignRight         QtCore.Qt.AlignmentFlag.AlignRight
QtCore.Qt.AlignTop         QtCore.Qt.AlignmentFlag.AlignTop
QtCore.Qt.AlignBottom         QtCore.Qt.AlignmentFlag.AlignBottom
QtWidgets.QListView.TopToBottom         QtWidgets.QListView.Flow.TopToBottom
QtWidgets.QListView.LeftToRight         QtWidgets.QListView.Flow.LeftToRight

Layout 佈局
PyQt5         PyQt6
QtCore.Qt.AlignRight         QtCore.Qt.AlignmentFlag.AlignRight
QtCore.Qt.AlignVCenter         QtCore.Qt.AlignmentFlag.AlignVCenter
QtCore.Qt.AlignHCenter         QtCore.Qt.AlignmentFlag.AlignHCenter
QtWidgets.QFormLayout.DontWrapRows         QtWidgets.QFormLayout.RowWrapPolicy.DontWrapRows
QtWidgets.QFormLayout.WrapLongRows         QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows
QtWidgets.QFormLayout.WrapAllRows         QtWidgets.QFormLayout.RowWrapPolicy.WrapAllRows

滑鼠、鍵盤與視窗
PyQt5         PyQt6
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.QShortcut         QtGui.QShortcut
Qt.Checked         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’s resource

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

Native:

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() 的 .get() 而不是 QOpenGLContext() 的。
        QWidget.mapToGlobal() 和 QWidget.mapFromGlobal() 返回一個 QPoinF 對象。

參考資料

        https://www.riverbankcomputing.c ... t5_differences.html
        https://www.pythonguis.com/faq/pyqt5-vs-pyqt6/

In Qt6 the QAction class, which is used for creation toolbars and menus, has been moved from the QtWidgets to the QtGui module.




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 轉播轉播 分享分享 分享淘帖
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|Archiver|手機版|艾歐踢創新工坊    

GMT+8, 2024-5-16 13:59 , Processed in 0.238476 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表