(PySide6)使用qt designer设计ui组件生成python代码且导入到主界面

本文介绍了如何使用Pyside6进行桌面开发,通过qtdesigner创建和组件化UI元素,以Home界面中的totaltargets为例,提取并转化为独立的ColorfulBlock组件,包括XML设计、Python代码生成及控制器设计的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在入坑pyside做一下桌面开发,下面以其他人做的软件说明一下如何实现:
1、使用qt designer进行组件开发
2、导出到py代码
3、使用qt designer导入这个自定义插件再进行开发

下面是需要用到的基础以及项目源代码:
https://github.com/muziing/PySide6-Code-Tutorial

https://github.com/Jai-wei/YOLOv8-PySide6-GUI

ps:本文是以YOLOv8-PySide6-GUI 里面的home界面作为例子,截取其中一个界面元素作为ui组件,再行开发的。请自行准备素材以及项目代码。

ps2:默认你已经知道怎么使用qt designer,怎么打开qt designer,怎么新建ui文件,怎么将ui文件导出为 py代码。

过程

项目代码如下:
在这里插入图片描述

ps:红线画出来的是我先行摸索探索做的ui组件,花了点时间终于打通了。

运行界面如下:

在这里插入图片描述

组件编写说明

组件场景,如下图:
在这里插入图片描述
下面要将这个显示块,total targets做成一个组件(如果你看过home里面的xml或者home.py代码会发现,就一个显示块里面包含的组件不少的,拿它来组件化很合适)。
home.py里面相关代码如下:

        self.Target_QF = QFrame(self.QF_Group)
        self.Target_QF.setObjectName(u"Target_QF")
        self.Target_QF.setMinimumSize(QSize(170, 80))
        self.Target_QF.setMaximumSize(QSize(170, 80))
        self.Target_QF.setToolTipDuration(0)
        self.Target_QF.setStyleSheet(u"QFrame#Target_QF{\n"
"color: rgb(255, 255, 255);\n"
"border-radius: 15px;\n"
"background-color: qradialgradient(cx:0, cy:0, radius:1, fx:0.1, fy:0.1, stop:0 rgb(253, 139, 133),  stop:1 rgb(248, 194, 152));\n"
"border: 1px outset rgb(252, 194, 149)\n"
"}\n"
"")
        self.Target_QF.setFrameShape(QFrame.Shape.StyledPanel)
        self.Target_QF.setFrameShadow(QFrame.Shadow.Raised)
        self.verticalLayout_9 = QVBoxLayout(self.Target_QF)
        self.verticalLayout_9.setSpacing(0)
        self.verticalLayout_9.setObjectName(u"verticalLayout_9")
        self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
        self.Target_top = QFrame(self.Target_QF)
        self.Target_top.setObjectName(u"Target_top")
        self.Target_top.setStyleSheet(u"border:none")
        self.Target_top.setFrameShape(QFrame.Shape.StyledPanel)
        self.Target_top.setFrameShadow(QFrame.Shadow.Raised)
        self.horizontalLayout_7 = QHBoxLayout(self.Target_top)
        self.horizontalLayout_7.setSpacing(0)
        self.horizontalLayout_7.setObjectName(u"horizontalLayout_7")
        self.horizontalLayout_7.setContentsMargins(0, 3, 0, 3)
        self.label_6 = QLabel(self.Target_top)
        self.label_6.setObjectName(u"label_6")
        self.label_6.setMaximumSize(QSize(16777215, 30))
        font2 = QFont()
        font2.setFamilies([u"Segoe UI"])
        font2.setPointSize(16)
        font2.setBold(True)
        font2.setItalic(True)
        self.label_6.setFont(font2)
        self.label_6.setStyleSheet(u"color: rgba(255, 255, 255,210);\n"
"padding-left:12px;\n"
"font: 700 italic 16pt \"Segoe UI\";")
        self.label_6.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.label_6.setIndent(0)

        self.horizontalLayout_7.addWidget(self.label_6)


        self.verticalLayout_9.addWidget(self.Target_top)

        self.line_3 = QFrame(self.Target_QF)
        self.line_3.setObjectName(u"line_3")
        self.line_3.setMaximumSize(QSize(16777215, 1))
        self.line_3.setStyleSheet(u"background-color: rgba(255, 255, 255, 89);")
        self.line_3.setFrameShape(QFrame.Shape.HLine)
        self.line_3.setFrameShadow(QFrame.Shadow.Sunken)

        self.verticalLayout_9.addWidget(self.line_3)

        self.Target_bottom = QFrame(self.Target_QF)
        self.Target_bottom.setObjectName(u"Target_bottom")
        self.Target_bottom.setStyleSheet(u"border:none")
        self.Target_bottom.setFrameShape(QFrame.Shape.StyledPanel)
        self.Target_bottom.setFrameShadow(QFrame.Shadow.Raised)
        self.verticalLayout_10 = QVBoxLayout(self.Target_bottom)
        self.verticalLayout_10.setSpacing(0)
        self.verticalLayout_10.setObjectName(u"verticalLayout_10")
        self.verticalLayout_10.setContentsMargins(0, 6, 0, 6)
        self.Target_num = QLabel(self.Target_bottom)
        self.Target_num.setObjectName(u"Target_num")
        self.Target_num.setMinimumSize(QSize(0, 30))
        self.Target_num.setMaximumSize(QSize(16777215, 30))
        font3 
<think>好的,我现在需要帮助用户在PyCharm中配置PySide6Qt Designer,以便快速搭建Python的可视化界面。首先,我得回想一下自己之前配置这些工具时的步骤,确保每个环节都正确无误。 用户的需求很明确,要具体的步骤和代码示例。我需要先确认PyCharm的版本是否影响配置过程,不过一般来说步骤是类似的。首先,安装PySide6库,这是必须的。用户可能已经安装了Python环境,但需要提醒他们使用PyCharm的终端或者设置中的Python解释器来安装。 接下来是Qt Designer的集Qt Designer是一个图形化工具,用于设计界面,生成.ui文件。PyCharm默认可能没有集这个工具,所以需要手动配置外部工具。这时候,我需要告诉用户如何在PyCharm中添加外部工具,指定Qt Designer的路径。但这里有个问题,安装PySide6之后,Qt Designer的位置在哪里呢?在Windows下,通常是在Python的Scripts目录下,比如Lib\site-packages\PySide6\designer.exe。Linux或Mac可能路径不同,需要用户根据系统调整。 然后,用户需要将设计好的.ui文件转换Python代码。这可以通过pyside6-uic命令行工具完。同样,这个工具的位置可能在Scripts目录下。所以,在PyCharm中再添加一个外部工具,使用pyside6-uic将.ui文件转换为.py文件。 接下来是具体的步骤分解。第一步安装PySide6,第二步配置Qt Designer作为外部工具,第三步配置pyside6-uic工具。每一步都需要详细说明参数和工作目录的设置,确保用户能够正确操作。 之后,提供一个简单的示例,从设计界面到生成代码,再到编写主程序。这部分需要代码示例,确保用户能够复制粘贴并运行。同时,要注意代码中的导入是否正确,比如从PySide6的模块导入。 可能遇到的常见问题包括路径错误、外部工具配置参数不正确、.ui文件没有正确转换等。需要提醒用户检查这些点,比如确认PySide6安装功,路径是否正确,工作目录是否设置正确。 另外,用户可能不知道如何使用Qt Designer,可以简单提及基本用法,比如拖放组件,保存为.ui文件。但详细使用可能超出当前问题的范围,所以保持简洁。 最后,确保所有步骤连贯,用户按照顺序操作后能够功运行一个示例程序。测试一遍自己提供的步骤,确保没有遗漏或错误。例如,转换后的.py文件可能需要调整导入语句,比如将PySide6的模块导入正确,避免出现导入错误。 总结下来,步骤应该是:安装库、配置外部工具、设计界面、转换文件、编写主程序。每个环节都需要详细说明,确保用户能够一步步跟随操作。</think>以下是在PyCharm中配置PySide6Qt Designer的详细步骤指南(Windows/macOS通用): 一、安装PySide6 1. 打开PyCharm > 底部Terminal执行: ```bash pip install pyside6 ``` 二、配置Qt Designer 1. 打开设置 > Tools > External Tools > 点击+号 2. 按以下参数填写: ``` Name: Qt Designer Program: $PyInterpreterDirectory$\Scripts\pyside6-designer.exe (Windows) 或 $PyInterpreterDirectory$/bin/pyside6-designer (macOS) Working: $ProjectFileDir$ ``` 三、配置UIC编译器(转换.ui文件为.py) 1. 再次添加External Tool: ``` Name: PySide6-UIC Program: $PyInterpreterDirectory$\Scripts\pyside6-uic.exe (Windows) 或 $PyInterpreterDirectory$/bin/pyside6-uic (macOS) Arguments: $FileName$ -o $FileNameWithoutExtension$.py Working: $FileDir$ ``` 四、快速开发流程演示 1. 右键项目目录 > External Tools > Qt Designer 2. 设计界面(示例创建一个按钮)并保存为main_window.ui 3. 右键main_window.ui > External Tools > PySide6-UIC 生成main_window.py(自动转换界面代码) 4. 创建main.py编写业务逻辑: ```python import sys from PySide6.QtWidgets import QApplication from main_window import Ui_MainWindow # 自动生成的界面类 from PySide6.QtWidgets import QMainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) # 添加交互逻辑示例 self.ui.pushButton.clicked.connect(self.on_click) def on_click(self): self.ui.label.setText("按钮已点击!") if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec()) ``` 五、运行验证 点击运行main.py,可以看到带按钮的窗口,点击按钮标签文字会改变 常见问题处理: 1. 如果提示找不到模块:检查PySide6是否安装到当前Python环境 2. 转换失败时:确认.ui文件路径无中文/特殊字符 3. macOS需要先执行:`xcode-select --install` 安装命令行工具 进阶技巧: 1. 在Qt Designer中可以使用QSS直接编写控件样式 2. 信号/槽机制可通过右键控件直接配置 3. 使用QDockWidget创建可停靠面板 通过这套配置,可实现: 1. 可视化界面设计Qt Designer) 2. 实时预览界面效果 3. 业务逻辑与界面分离开发 4. 快速迭代界面修改(修改.ui后重新转换即可)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值