【Python】界面设计——GUI编程之【PyQt5】

本文档详细介绍了PyQt5的基础知识,包括程序结构分析、窗口属性设置等内容,并提供了PyQt5的过程性和面向对象代码结构模板。此外,还深入探讨了QObject类的功能,如对象名称与属性、信号处理等,以及QWidget类的高级用法。

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

文章目录

一. PyQt5基础

🔰常用模块:

  1. QtWidgets:包含了一整套UI元素控件,用于建立符合系统风格的界面;
  2. QtGui:涵盖了多种基本图形功能的类(字体, 图形,图标,颜色);
  3. QtCore:涵盖了包的核心的非GUI功能(时间,文件,目录,数据类型,文本流,链接,线程进程);

(一) 窗口显示

import sys  # 系统内置类
from PyQt5.Qt import *  # 主要包含了我们常用的一些类,汇总到了一块

if __name__ == '__main__':
	# 创建一个应用程序对象
	app = QApplication(sys.argv)
	# 创建一个空白控件(窗口)
	window = QWidget()
	# 设置窗口标题
	window.setWindowTitle("计时器")
	# 设置窗口尺寸
	window.resize(500, 500)
	# 移动窗口位置
	window.move(200, 200)
	# 创建label控件
	label = QLabel(window)
	# 为控件设置文本
	label.setText("hello")
	# 移动控件的位置
	label.move(160, 160)
	# 显示窗口
	window.show()
	# 进入程序的主循环,并通过exit函数确保主循环安全结束
	sys.exit(app.exec_())


(二) PyQt5程序结构分析

1. 导入需要的包和模块

from PyQt5.Qt import *
import sys  

2. 创建一个应用程序对象

# 创建一个应用程序对象
app = QApplication(sys.argv)

3. 控件的操作

🔰创建控件,设置控件(大小,位置,样式),事件,信号的处理

3.1 创建控件

🔰当我们创建一个控件之后,如果这个控件没有父控件,则把它当作顶层控件(窗口),系统会自动的给窗口添加一些装饰(标题栏),窗口控件具备一些特性(设置标题,图标);

# 创建一个空白控件(窗口)
window = QWidget()    
# 设置窗口标题
window.setWindowTitle("计时器")
# 设置窗口尺寸
window.resize(500, 500)
# 移动窗口位置
window.move(200, 200)
3.2 设置控件

🔰控件也可以作为一个容器(承载其他的控件);

# 创建label控件
label = QLabel(window)
# 为控件设置文本
label.setText("hello")
# 移动控件的位置
label.move(160, 160)
3.3 展示控件

🔰刚创建好一个控件之后,(这个控件没有什么父控件),默认情况况下不会被显示,只有手动的调用show(0才可以显示;
🔰如果这个控件有父控件,那么一般情况下,父控件展示后,子控件会自动展示;

# 显示窗口
window.show()

4. 应用程序的执行,进入到消息循环

🔰让整个程序开始执行,并且进入到消息循环(无限循环);
🔰检测整个程序所接受到的用户的交互信息;

# 进入程序的主循环,并通过exit函数确保主循环安全结束
sys.exit(app.exec_())

(三) 窗口属性设置

属性 描述
window.serGeometry(300, 300, 300, 200) 前两个参数定义了move;后两个参数定义了resize
window.move(400, 300) 设置窗口左上顶端的坐标
window.resize(500, 500) 设置窗口的宽度,高度
window.setWindowTitle(‘计算器’) 设置窗口标题
window.setWindowIcon(QIcon(‘t1.jpg’)) 设置窗口logo


二. Pycham活动模板设置

🔰活动模板设置好以后,就可以快速生成所需模块;
在这里插入图片描述
🔰活动模板设置好以后,就可以快速生成所需模块;
在这里插入图片描述

(一) PyQt5的过程性代码结构模板

# 0. 导入需要的包和模块
from PyQt5.QtWidgets import *
import sys

# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件(创建窗口)
window = QWidget()
# 2.2 设置控件(窗口属性设置)
window.setWindowTitle("")
window.resize(500, 500)

# 设置内部控件
label = QLabel(window)
label.setText("")

# 2.3 展示控件
window.show()
# 3. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())

在这里插入图片描述


(二) PyQt5的面向对象代码结构模板

🔰下面两个模板是,第一个里面导入第二个,再运行第一个;

1. 主模块代码结构模板

# 0. 导入需要的包和模块
from PyQt5.QtWidgets import *
import sys

# 导入控件设置函数所在的模块
from 模块名 import Window

# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件(创建窗口及子控件)
# 从Menu模块中导入控件
window = Window()


# 2.3 展示控件
window.show()
# 3. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())

在这里插入图片描述

2. 控件设置模块代码结构模板

from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        
        label = QLabel(self)
        label.setText("")

# 在本模块内测试
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())

在这里插入图片描述



三. QObject

(一) 对象名称,属性

1. API

API 解析
setObjectName("唯一名称") 给一个Qt对象设置一个名称,当作对象的ID来使用。
objectName() 获取一个Qt对象的名称。
setProperty("属性名称",值) 给一个Qt对象动态的添加一个属性与值。
property("属性名称") 获取一个对象的属性值。
dynamicPropertyNames() 获取一个对象中所有通过setProperty()设置的属性名称。

2. 应用场景

🔰用于qss的ID选择器,属性选择器,方便统一设置样式。

3. 案例演示

🔰普通样式设置:

label = QLabel(self)
label.setText("社会我顺哥")
# 样式设置
label.setStyleSheet("font-size: 20px; color: rad;")

🔰优化样式设置:
1)新建一个.qss后缀的样式文件,内写以下内容:

组件选择器
QLabel {
    
	font-size: 20px; color: rad;}

表示只要是QLabel 组件,就将该样式作用在该组件上。前提是在.py文件里面写一下内容:

# qss样式表的引入
with open("Qobject.qss", "r") as f:
	qApp.setStyleSheet(f.read()

2)若.qss样式文件是类同如下内容

ID选择器
#notice {
    
	font-size: 20px; color: rad;}
组件ID选择器
QLabel#notice {
    
	font-size: 20px; color: rad;}

.py文件里面如下设置

# ID设置
label.setObjectName("notice")

这相当于是该组件的ID,类似于前端里面的类选择器
3)若.qss样式表文件是类同如下内容

组件属性值选择器
[notice_leve="warning"] {
    
    color:yellow;
   border-color: yellow;}

.py文件里面如下设置

# 属性与属性值的设置
label.setProperty("notice_leve", "warning")

该选择器的主要应用场景是:同一个属性设置不同的属性值,每种属性值对应一类样式。


(二) 父子对象的操作

1. API

🔰setParent(parent): 设置父对象; 父对象只能设置一个 。

# 设置父对象
obj3.setParent(obj1)  # obj1 为 obj3 的父对象

🔰parent(): 获取父对象

# 获取父对象
obj3.parent()  

🔰children(): 获取所有直接子对象

# 获取所有子对象
obj1.children()  

🔰findchild(参数1, 参数2, 参数3): 获取某一个指定名称和类型的子对象

1)参数1: (类型: QObject; 类型元组: QPushButton, QLabel;)
2)参数2: (名称: notice; 可以省略)
3)参数3: (查找选项: [Qt.FindChildrenRecursively: 递归查找, 默认选项];[Qt.FindDirectChildrenOnly: 只查找直接子对象])

🔰findchildren(参数1, 参数2, 参数3): 获取某一个指定名称和类型的所有子对象; 参数作用和上一个类同

# Qlabel组件统一改背景颜色

# 筛选出win_root里面的Qlabel组件子对象,遍历的所有筛选出来的子对象,进行修改
for sub_widget in win_root.findchildren(Qlabel)
### PyQt5 GUI 设计模板用于对象检测平台 对于构建基于PyQt5的目标检测平台,可以采用模块化的设计思路来创建图形用户界面(GUI),这有助于提高开发效率并简化维护工作。下面是一个基本的GUI设计模板示例。 #### 主窗口布局 主窗口应当包含菜单栏、工具栏以及状态栏等组件,这些可以通过`QMainWindow`类轻松实现。为了适应不同尺寸屏幕上的显示效果,建议使用布局管理器如`QVBoxLayout`, `QHBoxLayout` 或者更复杂的网格布局(`QGridLayout`) 来安排各个控件的位置[^1]。 ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Object Detection Platform") layout = QVBoxLayout() label = QLabel('Welcome to Object Detection Interface') layout.addWidget(label) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` #### 功能区划分 考虑到目标检测应用通常涉及图像加载、参数设置、模型选择等功能操作,在界面上应该合理规划功能区域。比如通过标签页的形式展示不同的配置选项;利用按钮组提供多种交互方式;借助滑动条调整算法参数等等。 #### 对话框集成 当涉及到文件读取/保存、颜色选取或者其他特定任务时,则可考虑引入对话框机制。PyQt自带了许多标准对话框可以直接调用,也可以自定义复杂逻辑下的专用对话框以满足特殊需求。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码字小萌新♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值