前言
本文将介绍pyqt如何在在QtDesigner中使用自定义组件,给出整个流程的方法。这个问题是本文在接触到 https://github.com/zhiyiYo/PyQt-Fluent-Widgets/ 这个项目时遇到的问题,PyQt-Fluent-Widgets
是一个PyQt的组件库,通过PyQt-Fluent-Widgets
,你可以构建好看的PyQt的UI。
问题在这里,PyQt-Fluent-Widgets
,实现了pyqt中的QPushButton等控件,假设名为button.py
的PushButton
,现在我有一个基于pyqt开发的老项目,想要在尽可能不改动原有代码的前提下进行Button的样式风格进行迁移,迁移成button.py
中的button风格,如PrimaryPushButton
或者PushButton
。老项目采用Qt Designer开发,并采用pyuic
将.ui
文件转换成.py
文件,如home.ui
转换成home.py
文件,我继承了一个类叫做home_controller.py
,继承了home.py
中的Ui_MainWindow
类,现在我需要在尽可能不改动原有老项目的代码的基础上,提供一个button转换的解决方案
这样子做有三个注意事项:
- 在尽可能不改动原有代码的前提下进行button的样式风格进行迁移,迁移成
button.py
中的button风格,如PrimaryPushButton - 不能改动
home.py
文件,只能改动home_controller.py
文件 - 假定
home.py
只有一个空的页面,里面只有一个QPushButton
的按钮
当时我想了好一会,暂时没想到解决方案,最后在关于qt-designer中使用组件的问题 · Issue #46 · zhiyiYo/PyQt-Fluent-Widgets (github.com) 中看到有相关使用者进行尝试,给我提供了思路。
问题描述
可以在qtdesigner用的,比如lineEdit,你在qtdesigner正常添加LineEdit控件,然后右键,把它提升为 LineEdit (作者写的组建名),头文件就写 qfluentwidgets .这样你的ui文件生成py文件的时候,会自动import这个组件。
通过这种方式,就可以实现在Qt Designer中直接使用自定义的组件了,但是qfluentwidgets
这个库在此处的引用还是有一些问题,因为qfluentwidgets
作者在开发插件的时候,有一些控件的形参和其父类的形参是不一样的,什么意思呢?
简单来说就是qfluentwidgets
作者的PushButton
是这么定义的: