PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute

问题描述:

利用 PyQt5 编写可视化界面是较为普遍的做法,但是使用全新UI版本的 Pycharm 修改之前正常的UI文件时,在没有动其他代码的情况下发现出现以下报错 AttributeError: type object 'Qt' has no attribute 'Qt::ContextMenuPolicy::DefaultContextMenu'

bash 复制代码
Traceback (most recent call last):
  File "E:\master\main.py", line 16, in <module>
    main()
  File "E:\master\main.py", line 9, in main
    main_window = MainWindow() #创建窗口对象
  File "E:\master\MainWindow.py", line 24, in __init__
    loadUi("./UI/MainWindow0.ui", self)
  File "D:\newanaconda\lib\site-packages\PyQt5\uic\__init__.py", line 238, in loadUi
    return DynamicUILoader(package).loadUi(uifile, baseinstance, resource_suffix)
  File "D:\newanaconda\lib\site-packages\PyQt5\uic\Loader\loader.py", line 66, in loadUi
    return self.parse(filename, resource_suffix)
  File "D:\newanaconda\lib\site-packages\PyQt5\uic\uiparser.py", line 1037, in parse
    actor(elem)
  File "D:\newanaconda\lib\site-packages\PyQt5\uic\uiparser.py", line 826, in createUserInterface
    self.wprops.setProperties(self.toplevelWidget, elem)
  File "D:\newanaconda\lib\site-packages\PyQt5\uic\properties.py", line 415, in setProperties
    prop_value = self.convert(prop, widget)
  File "D:\newanaconda\lib\site-packages\PyQt5\uic\properties.py", line 378, in convert
    return func(prop[0], **args)
  File "D:\newanaconda\lib\site-packages\PyQt5\uic\properties.py", line 129, in _enum
    return self._pyEnumMember(prop.text)
  File "D:\newanaconda\lib\site-packages\PyQt5\uic\properties.py", line 111, in _pyEnumMember
    return getattr(QtCore.Qt, membername)
AttributeError: type object 'Qt' has no attribute 'Qt::ContextMenuPolicy::DefaultContextMenu'

原因分析:

经排查,发现原因是编辑UI文件时使用了 Pycharm 自带的高版本Qt designer插件,使用该版本的designer编辑UI文件时保存的格式会发生变化。如下图所示

左侧为使用Pycharm 自带的高版本Qt designer插件编辑保存后的UI文件源码,右侧为使用外部工具的Qt designer 编辑保存后的UI文件源码,可见它们保存的格式略有区别。正是这种区别导致了报错的发生。


解决方案:

  1. 首先是解绑新版Pycharm里面对 .ui 文件打开方式的绑定,如下图所示:

    将插件里面搜索qt,取消qt的方框。重启pycharm生效之后,就不会再利用 pycharm 自带的高版本designer插件打开 .ui 文件了。
    注:也可以不解绑,但是不要用pycharm自带的designer对文件做任何修改,实测改动再取消改动保存后还是会改变格式导致保错。
  2. 配置外部工具编辑 .ui 文件,参考相关博客即可: Pycharm配置PyQt5的三个External Tools---Qt Designer、pyUIC、pyRCC
    具体为:File -> Settings -> Tools-> External Tools,点击 + 新建扩展工具,如下图所示
相关推荐
鬼手点金6 小时前
Scrapy + Playwright 完整示例(JS 动态渲染网页)
开发语言·javascript·爬虫·python·scrapy·html·json
存在morning6 小时前
【Python 开发实践 一】Python vs Go vs Java 三门语言对比
java·python·golang
vx-程序开发6 小时前
springboot旅游推介平台---附源码24175
java·spring boot·python·spring cloud·eclipse·django·idea
心运软件6 小时前
基于深度学习的宝石图像分类系统
人工智能·python·深度学习·机器学习·分类·数据挖掘
一木 之林7 小时前
AI实战 : Numpy图像处理与深度学习框架
python
c_lb72887 小时前
零基础选策略工具,先分清三件事
人工智能·python
夜雪一千7 小时前
Python如何使用XPath定位没有特征的元素?无id、无class通用定位技巧
开发语言·python
艾莉丝努力练剑7 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
流浪0017 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·python
鸿芯微控科技7 小时前
MFC关断后还有流量怎么办?零流量、阀门泄漏、压差与Python分析
c++·python·mfc·质量流量控制器·关断泄漏·零流量测试