参考B站教程:【PyQt5 快速入门】 https://www.bilibili.com/video/BV1LT4y1e72X/?p=4&share_source=copy_web&vd_source=404581381724503685cb98601d6706fb
前几p都是关于如何安装和配置pyqt5的内容,这里不再做笔记,本笔记从P3开始。
1.安装PyQt5并尝试运行一个最简单的窗口
安装pyqt5的教程之前写过:软件使用教程二、在anaconda安装虚拟环境,并在此环境中下载和配置pyqt5-优快云博客
下面运行一个最简单的窗口文件,创建一个新python文件,输入以下代码(相关解释在代码中标记清楚了)
注意:以后所有的代码基本上按照这三步框架展开来写了!
#导入模块
import sys
from PyQt5.QtWidgets import QWidget, QApplication
if __name__== '__main__':
#1.必有!有且只有一个!创建了一个QApplication对象,变量为app指向QApplication这个类
#类QApplication()内的sys.argv意思是一个列表,是需要传进的参数
app = QApplication(sys.argv)
#2.界面里面有啥
widget = QWidget()#自己创建了一个界面对象
#设置窗口标题
widget.setWindowTitle("Hello, PyQt5!")
#展示窗口,没这句就看不见界面
widget.show()
#3.必有!程序进行循环等待状态,意思不停地运行就是检测操作做出反应
app.exec()
2.介绍PyQt模块
PyQt模块最常用的功能模块有三个:
1)QtCore:包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用。
2)QtGui:包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类。(如果需要新的画布 用这个)
3)QtWidgets:widget是插件的意思,这个模块包含了一些列创建桌面应用的UI元素。(需要一些小零件直接放窗口里的用这个)
3.具体的控件介绍
1)按钮
它的名字是QpushButton
实验代码如下:
#导入模块
import sys
from PyQt5.QtWidgets import QWidget, QApplication,QPushButton
if __name__== '__main__':
#1.创建了一个QApplication对象,变量为app指向QApplication这个类
app = QApplication(sys.argv)
#2.界面里面有啥
w = QWidget()
#设置窗口标题
w.setWindowTitle("第一个PyQt程序")
#在窗口里添加控件
btn=QPushButton("按钮")
#设置按钮的父亲是当前窗口,等于是添加到窗口显示
btn.setParent(w)
#展示窗口,没这句就看不见界面
w.show()
#3.程序进行循环等待状态
app.exec()
解释一下这个代码逻辑
... #1.创建了一个QApplication对象,变量为app指向QApplication这个类 app = QApplication(sys.argv) #对应下面蓝色,这里创建了一个窗口程序 #2.界面里面有啥 w = QWidget() #对应下面红色,这里创建了一个窗口 #设置窗口标题 w.setWindowTitle("第一个PyQt程序") #在窗口里添加控件 btn=QPushButton("按钮") #对应下面绿色,这里创建了一个按钮 #设置按钮的父亲是当前窗口,等于是添加到窗口显示 btn.setParent(w) #对应上面绿色,这个按钮是继承了窗口出现在窗口内 #展示窗口,没这句就看不见界面 w.show() #对应上面红色,展示这个窗口 #3.程序进行循环等待状态 app.exec() #对应上面蓝色,循环执行这个程序
现在执行程序得到如下结果:
现在稍微解释一下父子继承关系,(本文说的插件跟控件是一回事)即需要用到
插件变量.setParent(父亲)
怎么判断父子关系:
如果最后出现效果如下图所示,即插件2出现在插件 1里,插件1出现在窗口里,则满足插件1是插件2的父亲,窗口是插件1的父亲。
如果最后出现效果如下图所示,即插件2出现在窗口里,插件1出现在窗口里,则满足插件1是插件2的父亲,窗口是插件1和插件2的父亲。
2)文本
纯文本控件为 QLabel,位于PyQt5.QtWidgets里面。下面是代码实验,解释已经写在注释里面:
#导入模块
import sys
from PyQt5.QtWidgets import QWidget, QApplication,QLabel
if __name__== '__main__':
#1.创建了一个QApplication对象,变量为app指向QApplication这个类
app = QApplication(sys.argv)
#2.界面里面有啥
w = QWidget()
#设置窗口标题
w.setWindowTitle("第一个PyQt")
#在窗口里添加控件,设置这些控件的父亲是当前窗口
label = QLabel("账号:",w)#等价于label = QLabel("账号:") label.setParent(w)
#显示位置与大小:x,y,w,h
label.setGeometry(20,20,500,30)#解释一下,(20,20)指的是位置,(500,30)指的是长宽
#展示窗口,没这句就看不见界面
w.show()
#3.程序进行循环等待状态
app.exec()
结果如下:
3)输入框
输入框的控件名称为 QLineEdit ,位于PyQt5.QtWidgets里面。
下面是实验代码,解释放在了注释里:
#导入模块
import sys
from PyQt5.QtWidgets import QWidget, QApplication,QLabel,QLineEdit,QPushButton
if __name__== '__main__':
#1.创建了一个QApplication对象,变量为app指向QApplication这个类
app = QApplication(sys.argv)
#2.界面里面有啥
w = QWidget()
#设置窗口标题
w.setWindowTitle("第一个PyQt")
#在窗口里添加纯文本
label = QLabel("账号:",w)
label.setGeometry(20,20,500,30)#解释一下,(20,20)指的是位置,(500,30)指的是长宽
#在窗口里添加文本框
edit = QLineEdit(w)
edit.setPlaceholderText("请输入账号")
edit.setGeometry(55,20,200,20)#规定位置和大小规则同上
#在窗口里添加按钮
btn=QPushButton("注册",w)
btn.setGeometry(55,80,70,30)#规定位置和大小规则同上
#展示窗口,没这句就看不见界面
w.show()
#3.程序进行循环等待状态
app.exec()
结果如下:
解释一下位置的规定,这其实是一个绝对位置,并且按照如下坐标轴安放: