PyQt5 在qtdesigner中使用自定义的控件

前言

奇奇怪怪!,虽然和我想象不一样但是还是记录一下吧!本来我以为是在QDesigner左边能显示控件可以实时拖拽,但是谁知道实际是在.ui文件中相当于一个占位符一样理解! 转化为.py文件加载了自定义的控件类(就是类似占位替换的感觉),果然python 用QDesigner太鸡肋,有这个时间拖来拖去,代码码UI都完了!!!

1 提升控件

打开QDesigner,创建一个QWidget,在上面拖2个QFrame,给QWidget创建一个水平布局,如下:
在这里插入图片描述

选择一个frame右击提升窗口部件,最后点击提升,如下:
在这里插入图片描述
提升为自定义类:
在这里插入图片描述
在这里插入图片描述
其中BoardFrame为自定义的一个控件,BoardFrame继承于QFrame.
BoardFrame.py代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal,Qt,QRegExp
from PyQt5.QtGui import QRegExpValidator
import sys

class BoardFrame(QFrame):
    def __init__(self, *argc, **argv):
        super(BoardFrame, self).__init__(*argc, **argv)
        self.setFixedSize(200,500)
        self.mainlayout = QVBoxLayout(self)
        self.name = QLabel("名字")
        self.name.setFrameStyle(QFrame.Box | QFrame.Plain)
        self.name.setAlignment(Qt.AlignCenter)
        self.mainlayout.addWidget(self.name )
        self.frame = QFrame(self)
        self.mainlayout.addWidget(self.frame)
        frame_layout = QVBoxLayout(self.frame)
        for i in range(16):
            btn = QCheckBox("按钮%d " % (i))
            frame_layout.addWidget(btn)
            frame_layout.setContentsMargins(4,4,4,4)
            if (i + 1) % 8 == 0:
                frame01 = QFrame(self.frame)
                frame01.setFrameStyle(QFrame.HLine | QFrame.Plain)
                frame_layout.addWidget(frame01)
        #
        childlayout = QHBoxLayout()
        clear_btn = QPushButton("全部取消")
        set_btn = QPushButton("全部勾选")
        childlayout.addWidget(clear_btn)
        childlayout.addWidget(set_btn)
        self.mainlayout.addLayout(childlayout)
        ##边框
        self.frame.setFrameStyle(QFrame.Box | QFrame.Plain)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = BoardFrame()
    win.show()
    sys.exit(app.exec_())

2 转化.ui文件为.py文件

保存ui文件为test.ui,然后转化为.py文件 pyuic5 -o test.py test.ui
将BoardFrame.py 和 test.py文件放到同级目录。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from BoardFrame import BoardFrame


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 600)
        self.horizontalLayout = QtWidgets.QHBoxLayout(Form)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.frame = BoardFrame(Form)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.horizontalLayout.addWidget(self.frame)
        self.frame_2 = BoardFrame(Form)
        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")
        self.horizontalLayout.addWidget(self.frame_2)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))

#上面为工具转化的代码,下面为我们自己添加的测试
if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QWidget()
    #widget.setStyleSheet("background-color:red;")
    widget.show()
    test = Ui_Form()
    test.setupUi(widget)
    sys.exit(app.exec_())

效果如下:
在这里插入图片描述

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt Designer是PyQt5的一个可视化设计工具,它可以帮助Python开发者快速创建GUI应用程序的用户界面。Qt Designer提供了丰富的控件库,可以快速创建常见的GUI组件,如按钮、标签、文本框等,并且可以自定义控件的属性、布局以及信号槽等。下面是Qt Designer的所有详细功能及使用教程。 ## Qt Designer的所有详细功能 ### 1. 控件库 Qt Designer提供了丰富的控件库,包括基本控件、布局控件、对话框、菜单栏等。这些控件可以直接拖拽到界面设计器,并进行属性设置和布局。 ### 2. 属性设置 在Qt Designer,可以通过属性编辑器设置控件的属性,如大小、位置、文本、字体、颜色等。同时,还可以设置控件的样式表、信号槽等。属性编辑器界面可以通过点击控件显示出来。 ### 3. 布局管理器 Qt Designer提供了多种布局管理器,如水平布局、垂直布局、网格布局等。通过布局管理器,可以轻松地调整控件的位置和大小,使得控件在不同分辨率的屏幕上都能适应。同时,还可以设置控件之间的间隔和对齐方式。 ### 4. 信号槽 Qt Designer提供了信号槽编辑器,可以通过拖拽控件之间的连接线来设置信号和槽。信号是控件发出的事件,如按钮被点击、文本框内容改变等;槽是处理信号的函数,可以在代码实现。通过信号槽机制,可以实现控件之间的交互。 ### 5. 预览和调试 在Qt Designer,可以通过预览功能来查看设计的界面效果。同时,还可以通过连接到Python解释器来进行调试,调试过程可以查看控件的属性和信号槽的连接情况。 ## 使用教程 ### 1. 安装pyqt5-tools 首先需要安装pyqt5-tools,可以通过pip来安装: ``` pip install pyqt5-tools ``` ### 2. 打开Qt Designer 安装完成后,在命令行输入以下命令打开Qt Designer: ``` designer ``` ### 3. 创建新界面 打开Qt Designer后,可以选择新建一个界面或打开一个已有的界面。新建一个界面可以通过点击“File”->“New”->“Main Window”来创建。 ### 4. 添加控件 在左侧的控件选择需要添加的控件,然后将其拖拽到界面设计器控件的属性可以在右侧的属性编辑器进行设置。 ### 5. 设置布局 通过选择相应的布局管理器,可以设置控件的布局。布局管理器可以在左侧的控件找到。此外,还可以通过手动调整控件的位置和大小来进行布局设置。 ### 6. 设置信号槽 在信号槽编辑器,可以通过拖拽控件之间的连接线来设置信号和槽。信号和槽的设置可以在代码实现。 ### 7. 预览和调试 在Qt Designer,可以通过预览功能来查看设计的界面效果。同时,还可以通过连接到Python解释器来进行调试,调试过程可以查看控件的属性和信号槽的连接情况。 ### 8. 保存界面 完成设计后,可以通过“File”->“Save”来保存界面文件。界面文件的后缀名为.ui,可以在代码使用pyuic5工具将其转换为Python代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值