一. PyQt5基础
🔰常用模块:
- QtWidgets:包含了一整套UI元素控件,用于建立符合系统风格的界面;
- QtGui:涵盖了多种基本图形功能的类(字体, 图形,图标,颜色);
- QtCore:涵盖了包的核心的非GUI功能(时间,文件,目录,数据类型,文本流,链接,线程进程);
(一) 窗口显示
importsys# 系统内置类fromPyQt5.Qtimport*# 主要包含了我们常用的一些类,汇总到了一块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. 导入需要的包和模块
fromPyQt5.Qtimport*importsys2. 创建一个应用程序对象
# 创建一个应用程序对象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. 导入需要的包和模块fromPyQt5.QtWidgetsimport*importsys# 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. 导入需要的包和模块fromPyQt5.QtWidgetsimport*importsys# 导入控件设置函数所在的模块from模块名importWindow# 1. 创建一个应用程序对象app=QApplication(sys.argv)# 2. 控件的操作# 2.1 创建控件(创建窗口及子控件)# 从Menu模块中导入控件window=Window()# 2.3 展示控件window.show()# 3. 应用程序的执行,进入到消息循环sys.exit(app.exec_())2. 控件设置模块代码结构模板
fromPyQt5.QtWidgetsimport*classWindow(QWidget):def__init__(self):super().__init__()self.setWindowTitle("")self.resize(500,500)self.setup_ui()defsetup_ui(self):label=QLabel(self)label.setText("")# 在本模块内测试if__name__=='__main__':importsys 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样式表的引入withopen("Qobject.qss","r")asf: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 的父对象��