PyQt6 和 PyQt5 的差異
.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().size().width()
QtWidgets.height() QtWidgets.QApplication.screens().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.
頁:
[1]