文章目录
- 一. PyQt5基础
- 二. Pycham活动模板设置
- 三. QObject
- 四. Qwidget
- 三. 常用组件
- QObject
一. PyQt5基础
🔰常用模块:
- QtWidgets:包含了一整套UI元素控件,用于建立符合系统风格的界面;
- QtGui:涵盖了多种基本图形功能的类(字体, 图形,图标,颜色);
- 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)