代码编织梦想

本文节选自笔者博客: https://www.blog.zeeland.cn/archives/eoifh3szz

前言

本文将介绍pyqt如何在在QtDesigner中使用自定义组件,给出整个流程的方法。这个问题是本文在接触到 https://github.com/zhiyiYo/PyQt-Fluent-Widgets/ 这个项目时遇到的问题,PyQt-Fluent-Widgets 是一个PyQt的组件库,通过PyQt-Fluent-Widgets ,你可以构建好看的PyQt的UI。

问题在这里,PyQt-Fluent-Widgets,实现了pyqt中的QPushButton等控件,假设名为button.pyPushButton,现在我有一个基于pyqt开发的老项目,想要在尽可能不改动原有代码的前提下进行Button的样式风格进行迁移,迁移成button.py中的button风格,如PrimaryPushButton或者PushButton。老项目采用Qt Designer开发,并采用pyuic.ui文件转换成.py文件,如home.ui转换成home.py文件,我继承了一个类叫做home_controller.py,继承了home.py中的Ui_MainWindow类,现在我需要在尽可能不改动原有老项目的代码的基础上,提供一个button转换的解决方案

这样子做有三个注意事项:

  1. 在尽可能不改动原有代码的前提下进行button的样式风格进行迁移,迁移成button.py中的button风格,如PrimaryPushButton
  2. 不能改动home.py文件,只能改动home_controller.py文件
  3. 假定home.py只有一个空的页面,里面只有一个QPushButton的按钮

当时我想了好一会,暂时没想到解决方案,最后在关于qt-designer中使用组件的问题 · Issue #46 · zhiyiYo/PyQt-Fluent-Widgets (github.com) 中看到有相关使用者进行尝试,给我提供了思路。

问题描述

可以在qtdesigner用的,比如lineEdit,你在qtdesigner正常添加LineEdit控件,然后右键,把它提升为 LineEdit (作者写的组建名),头文件就写 qfluentwidgets .这样你的ui文件生成py文件的时候,会自动import这个组件。

20230328212753.png 20230328212858.png

通过这种方式,就可以实现在Qt Designer中直接使用自定义的组件了,但是qfluentwidgets这个库在此处的引用还是有一些问题,因为qfluentwidgets作者在开发插件的时候,有一些控件的形参和其父类的形参是不一样的,什么意思呢?

简单来说就是qfluentwidgets作者的PushButton是这么定义的:

class PushButton(QPushButton):  
    """ push button """  
  
    def __init__(self, text: str, parent=None, icon: Union[QIcon, str, FluentIconBase] = None):
    ...

但是原生的QPushButton是这样定义的:

class QPushButton(QAbstractButton):  
	def __init__(self, *__args): # real signature unknown; restored from __doc__ with multiple overloads  
	    pass

说明text不是必填项,如果在QtDesigner想要设置自定义控件,那么形参一定要完全兼容父类才行,即你初始化CustomButton和初始化QPushButton的代码需要是一样的才可以,因此qfluentwidgets的控件代码和原生的不一样,需要写一个中间类进行改动。

解决方案

在这里,我想要使用qfluentwidgets里的PushButton控件,接下来将展示如何在Qt Designer中引用qfluentwidgets的控件,本项目在Undertone0809/pyqt-user-login: 一个基于PyQtMVC封装用户注册登陆模块模板 (github.com) 的基础上进行改造,旨在优化其UI。

首先,我们可以尝试新建一个/components/custom_button.py,代码如下:

from qfluentwidgets import PushButton  
  
  
class CustomButton(PushButton):  
    def __init__(self, parent=None):  
        super().__init__('', parent)

上面的代码继承了我想要使用的qfluentwidgets里的PushButton控件。

接下来,我们再新建一个/components/__init__.py,代码如下:

from .custom_button import CustomButton

最后,我们在Qt Designer中这样设置,新建一个CustomButton的类,然后头文件为components,如下图所示。

20230328213654.png

这个时候,我们就可以正常将一个普通的QPushButton 提升为CustomButton了,最后把ui转换成py,从下面的代码我们可以看到,自定义的控件转变成了from components import CustomButton了,到这个地步就差不多了,让我们来运行一下。

20230328222101.png 20230328223208.png

大功告成!

20230328223249.png
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/linZinan_/article/details/129827187

pycharm + pyqt5 + qtdesigner实现通过qtdesigner添加qscrollarea,在代码中添加控件实现滚动效果_wh_585的博客-爱代码爱编程

通过在QtDesigner中,新建一个继承自QWidget的窗口, 向窗口中添加一个QScrollArea,之后对窗口整体添加一个QHorizontal布局,所生成的界面布局以及对象布局如上两幅图片所示,接下来用代码展示如何向此滚动区域添加内置控件或者自定义控件,让我们的滚动区域可以入我们所期,滚动起来。 # -*- coding: utf-8 -*

第15.9节 pyqt学习入门:使用qt designer进行gui设计的步骤-爱代码爱编程

在使用Qt Designer进行GUI设计时,一般常规的步骤都是差不多的,主要步骤包括新建显示窗口、在窗口上按照规划的布局放置组件、设置初始化组件的属性、定义信号和槽函数的连接,一般后三步是每增加一个组件就执行一轮。 一、新

使用Qt Designer 结合pyqt5与matplotlib-爱代码爱编程

原文链接: https://yapayzekalabs.blogspot.com/2018/11/pyqt5-gui-qt-designer-matplotlib.html Chrome翻译插件显示原文是土耳其语, 可以利用google网页翻译翻译成英语, 还是比较通顺的. 这里帮助一下英语不太好的同学. 1.0 环境配置 需求依赖: matplotl

PyQt5 Qt Designer 新手教程(四)—— 对话框窗体的小结-爱代码爱编程

PyQt5 Qt Designer 新手教程(四)—— 对话框窗体的小结 教程博文 一、前言 实际操作都已经完成了,这一个节就是整个教程的小结。不过,作者的实力有限,就拿大佬的总结稍作修改作为我们这 PyQt5 Qt Designer 新手教程的总结。 二、对话框窗体的小结 Qt 设计师提供了种创建用户界面的快速、 简易方式。使用可视化设计

python qtdesigner 槽_第15.16节 PyQt(Python+Qt)入门学习:PyQt中的信号(signal)和槽(slot)机制以及Designer中的使用...-爱代码爱编程

1、引言 前面一些章节其实已经在使用信号和槽了,可是做为Qt中最重要的机制也是Qt区别与其余开发平台的重要核心特性,仍是很是有必要单独介绍。web 2、信号和槽的概念 2.一、概述 信号和槽是Qt特有的信息传输机制,是Qt设计程序的重要基础,它可让互不干扰的对象创建一种联系。svg 信号和槽用于对象间的通讯,在一个图形界面程序中,当一个部件中

PyQt5中 Qt Designer工具的使用-爱代码爱编程

Qt Designer是PyQt5程序UI界面的实现工具,使用Qt Designer可以拖拽、点击完成GUI界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。 本文主要内容 1、Qt Designer程序主界面窗口介绍。 2、Qt Designer程

PyQt窗口设计之Qt Designer-爱代码爱编程

Qt Designer 一、界面介绍二、Qt Designer的使用1、Qt Designer使用1. 工具栏的放置2. 资源的加载3. 使用Qt Designer编译的代码2、 ui文件的转化1. 使用命令行:2. 执行PyUIC程序3. PyCharm设置External Tools (强烈推荐)3、 qrc文件的转化1. 使用命令行2. Py

PyQT6的从零开始(二):PyQT6结合QTdesigner进行GUI开发的一个小例子-爱代码爱编程

文章目录 前言一、环境准备二、简单案例1.最终效果2.实现步骤总结 前言 本篇主要针对像我一样从未接触过GUI开发的小白,通过一个特别简单的例子来上手如何通过pyqt进行GUI程序开发,以便之后更好的理解高级内容 一、环境准备 参考上一篇笔记 Pyqt6的环境搭建 二、简单案例 1.最终效果 2.实现步骤 首先启动QTdesi

pyqt qtdesinger 自定义控件_m0_54256484的博客-爱代码爱编程

自定义控件包括3部分,自定义控件,提升控件和修改py文件。 1.自定义控件 在新建窗体时选择Widget。 这时这个窗体整个就是一个控件。 随便拖入些控件完成创建。保存。   命名为try_widget。   把ui文件转化为py文件。 自定义控件部分完成。 2.提升控件 新建一个QMainWindow。因为控件一般是用在窗

qt插件之qt designer插件实现_码农飞飞的博客-爱代码爱编程

文章目录 工程配置添加自定义控件插件导出接口实现使用自定义插件 相比于通过控件提升来使用自定义控件,在Qt Designer中直接使用自定义控件更加方便和直观。这里就介绍一下如编写和注册Qt Designer插件。Qt Designer插件本质上来说就是一个动态库,和普通的动态库的区别是插件中导出了Qt Designer能识别的接口。 工程配

python -- pyqt5(designer)中文详细教程(十)自定义控件-爱代码爱编程

自定义控件         PyQt5有丰富的组件,但是肯定满足不了所有开发者的所有需求,PyQt5只提供了基本的组件,像按钮,文本,滑块等。如果你还需要其他的模块,应该尝试自己去自定义⼀些。 自定义组件使用绘画⼯具创建,有两个基本方式:根据已有的创建或改进;通过自己绘图创建。 Burning widget 这个组件我们会在Nero,K3B,

qt designer加载自定义组件_qt designer 添加自定义类-爱代码爱编程

目的:将Qt Designer中QLabel组件用自己实现的可以绘制图像ROI区域的ROILabel类代替 解决: 在自己的代码中实现ROILabel类,继承自QLabel # main.py class ROILabe

python -爱代码爱编程

事件         signals and slots也 被其他⼈翻译成信号和槽机制。         所有的应用都是事件驱动的。事件大部分都是由用户的行为产⽣的,当然也有其他的事件产生方式,比如网络的连接,窗口管理器或者定时器等。调⽤应⽤的exec_()⽅法时,应⽤会进⼊主循环, 主循环会监听和分发事件。         在事件模型中,有三个⾓⾊

python -爱代码爱编程

绘图  PyQt5绘图系统能渲染矢量图像、位图图像和轮廓字体文本。⼀般会使用在修改或者提高现有组件的功能,或者创建自己的组件。使用PyQt5的绘图API进行操作。 绘图由 paintEvent() 方法完成,绘图的代码要放在 QPainter 对象的 begin() 和 end()方法之间。 是低级接口。 文本涂鸦 我们从画⼀些Unicode文

python -爱代码爱编程

控件2 本章我们继续介绍PyQt5控件。这次的有 QPixmap , QLineEdit , QSplitter ,和 QComboBox 。 图片 QPixmap 是处理图⽚的组件。本例中,我们使用 QPixmap 在窗⼜⾥显示⼀张图片。 from PyQt5.QtWidgets import (QWidget, QHBoxLayout,