前言
最近在入坑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 = QFont