pyqt5转pyqt6需要注意的事项

pyqt5转pyqt6需要注意的事项,第1张

pyqt5转pyqt6需要注意的事项

@[TOC]pyqt6

pyqt5转pyqt6需要注意的事项 一、枚举类型

Pyqt5的枚举类型是用python的enum.IntEnum实现的,Pyqt6的枚举类型是是用python的enum.Enum实现的。
在Pyqt5使用枚举为:类名.枚举值
在Pyqt6使用枚举为:类名.枚举名.枚举值。
枚举名是什么需要查qt文档,或者在IDE(vs code、pycharm、sublime等)查看document说明。
常用文档:pyqt6所有类
常用文档:Qt命名空间
以下是几个样例:

# from PyQt5.QtCore import Qt
from PyQt6.QtCore import Qt

# Qt.AlignCenter
# 在https://doc.qt.io/qt-6/qt.html查到
# enum:AlignmentFlag { AlignLeft, AlignRight, AlignHCenter, AlignJustify, AlignTop, …, AlignVertical_Mask }
Qt.AlignmentFlag.AlignCenter

# Qt.RightButton
Qt.MouseButton.RightButton
Qt.MouseButton.LeftButton

# QEvent.MouseButtonPress
QEvent.Type.MouseButtonPress

#QtWidgets.QMessageBox.Yes
QtWidgets.QMessageBox.StandardButton.Yes

# 其他枚举类型新写法:
Qt.MatchFlag.MatchExactly
Qt.ItemDataRole.UserRole
Qt.CheckState.Checked
Qt.ItemFlag.NoItemFlags
Qt.ContextMenuPolicy.CustomContextMenu
Qt.GlobalColor.red
QtGui.QFont.Weight.Bold
QtWidgets.QDialogButtonBox.ButtonRole.AcceptRole
QtWidgets.QLineEdit.EchoMode.Password
QAbstractItemView.EditTrigger.DoubleClicked
QAbstractItemView.EditTrigger.NoEditTriggers
QAbstractItemView.SelectionBehavior.SelectRows
二、取消QtWidgets.QDesktopWidget()
# 屏幕坐标、宽高
#rect =  QtWidgets.QDesktopWidget().screenGeometry()
rect = QtGui.QGuiApplication.primaryScreen().availableGeometry()
三、取消QtWidgets.qApp
# QtWidgets.qApp.quit()
QApplication.quit()
QApplication.exit()
四、改变QAction所属模块
# QtWidgets.QAction
QtGui.QAction
五、删除.exec_() 、.print_()方法

改用.exec()

六、删除Qt模块
# from PyQt5 import Qt
from PyQt6.QtCore import Qt
七、注意python、PyQt6、PyQt6-Qt6之间版本的一致性

(在外网环境通过pip install PyQt6安装的应该没有此问题,可跳过)
我的开发环境是Windows7(内网)、Windows10(外网)上的python3.8.10《python-3.8.10-amd64.exe》。我有离线安装的需求,之前下载PyQt6的whl文件的时候,没注意查看py版本,安装了下面的三个库

PyQt6-6.2.2-cp36-abi3-win_amd64.whl
PyQt6_Qt6-6.2.2-py3-none-win_amd64.whl
PyQt6_sip-13.2.0-cp38-cp38-win_amd64.whl

同样的代码,在Windows10(外网)上导入PyQt6正常运行,在Windows7(内网)上导入PyQt6的任意一个模块,都报错:importError: DLL load failed while importing QtCore: 找不到指定的程序。

Traceback (most recent call last):
  File "D:devworkspacetest.py", line 7, in 
    from PyQt6 import QtCore
importError: DLL load failed while importing QtCore: 找不到指定的程序。

网上找了很多资料,有说vscode+Anaconda安装python和Pyqt出问题的,有说要安装Visual C++2015-2019以上版本的,试了都没用。后面想着重新安装PyQt6试试,才发现我安装的PyQt6的《PyQt6-6.2.2-cp36-abi3-win_amd64.whl》写明cp36,是对应Python3.6的。然后马上重新下载了低版本的PyQt6.1.1,以下三个库重新安装了,就正常了。

PyQt6-6.1.1-cp36.cp37.cp38.cp39-none-win_amd64.whl
PyQt6_Qt6-6.1.1-py3-none-win_amd64.whl
PyQt6_sip-13.2.0-cp38-cp38-win_amd64.whl

不过奇怪的是,在Windows10上用Python3.8.10安装《PyQt6-6.2.2-cp36-abi3-win_amd64.whl》竟然能正常使用…
参阅:pyqt5与pyqt6的不同点

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5720516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存