此pyqt5的笔记来自B站李宁老师的视频,感谢这位老师!(https://www.bilibili.com/video/BV154411n79k)
课时3:开发第一个基于pyqt5的桌面应用程序
开发必须使用的两个类:QApplication(代表整个应用程序)和QWidge(代表窗口),都在PyQt5.Widgets
1、创建一个初始界面
import sys
from PyQt5.QtWidgets import QApplication,QWidget
# 只有从当前应用程序直接运行part3.py,才会调用(才会为真)
if __name__ == '__main__':
# 创建QApplication的实例,sys获得命令行参数
app = QApplication(sys.argv)
# 创建一个窗口
w = QWidget()
# 设置窗口尺寸
w.resize(400,200)
# 移动窗口
w.move(300,300)
# 设置窗口标题
w.setWindowTitle('biaoti')
# 显示窗口
w.show()
# 进入程序的主循环,并通过exit函数确保主循环安全结束
sys.exit(app.exec_())
课时5、6:使用designer设计图形界面
C:\ProgramData\Anaconda3\Lib\site-packages\PySide2
名称designer.exe
Layouts:布局控件
vertical layout:垂直布局
horizontal layout:水平布局
grid layout:栅格布局/网格布局
form layout:表单布局
Spacers:控制控件在垂直和水平方向间隔
Buttons:所有按钮控件
Push button:普通按钮
Tool button:工具条按钮
radio button:单选按钮
check box:多选按钮
command link button:连接命令按钮
dialog button box:
item views:
list view:列表
tree view:树
table view:表格
containers:容器控件
input widgets:采集用户输入的控件
display widgets:显示信息的控件
horizontal line:水平分隔线
vertical line:垂直分隔线
课时7:将.ui文件生成.py文件
方法一:通过命令行
python -m PyQt5.uic.pyuic demo.ui -o demo.py
方法二:
pyuic5 demo.ui -o demo.py
课时8、9、10:在QTdesigner中使用水平、垂直布局,同时使用两者
方法一:先放button,再选中所有的button,右键-布局-水平布局
方法二:先拖过来一个水平布局控件,再往里面放button等控件,注意,放的时候要放到控件的旁边(有蓝色的线出来的地方)
得到的ui,转为py文件
demo.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'demo.ui'
#
# Created by: PyQt5 UI code generator 5.12
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(190, 280, 351, 80))
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.toolButton.setText(_translate("MainWindow", "..."))
### 删去了一部分
使用demo.py文件 runDemo.py
import sys
# 引入demo.py文件
import demo
from PyQt5.QtWidgets import QApplication,QMainWindow
if __name__ =='__main__':
# 实例化一个app
app = QApplication(sys.argv)
# 实例化一个窗口
mainWindow = QMainWindow()
# 向主窗口上添加控件
# 从demo.py的Ui_MainWindow类中,实例化一个ui对象
ui = demo.Ui_MainWindow()
# 使用ui对象的setupUi()函数,创建demo.py中所有的组件,参数为窗口对象
ui.setupUi(mainWindow)
# 显示窗口
mainWindow.show()
# 进入程序的主循环,并通过exit函数确保主循环安全结束
sys.exit(app.exec_())
# 大致的步骤
# 1、创建应用
# 2、创建窗口
# 3、创建ui
# 4、显示窗口
# 5、进入主循环
课时23:在QTdesigner中完成信号与槽的设置
在QTdesinger中设置信号与槽,信号(signal)槽(slot),是QT的核心机制,也是PyQt的核心机制
信号:是由对象或控件发射出去的消息
按钮的单击时间,当单机按钮时,按钮就会向外发送单机消息。这些发送出去的信号需要一些代码来拦截,这些代码就是槽。槽本质上就是一个函数或者方法
信号可以理解为事件
槽可以理解为事件函数
需要将信号和槽绑定,一个信号可以与多个槽绑定,一个槽可以拦截多个信号
示例1:点击button按钮,实现关闭窗口
1、插入button按钮
2、Edit-->编辑信号/槽
3、点击button,向下拖动
4、左侧选择点击事件clicked(),右侧选择实现的方法close()
示例2:点击Check box按钮,实现line edit的显示
1、插入Check box按钮和line edit
2、Edit-->编辑信号/槽
3、点击Check box,向下拖动到line edit
4、左侧选择点击事件toggled(bool),右侧选择实现的方法setHidden(bool)
课时23:在QTdesigner中添加菜单和工具栏
注意:新建时,必须选择MainWindow
1、在界面右键:添加工具栏,添加状态栏
2、双击左上角的空白菜单栏进行重命名,添加子项的操作
3、实际上菜单栏里面是“动作”,点击“视图”--“动作编辑器”,可以将菜单选项拖动到菜单栏,也可以双击选项,设置属性,比如提示
课时24:使用python代码创建主窗口
3种主窗口类型:
1、QMainWindow:可以包含菜单栏、工具栏、状态栏和标题栏,是最常见的窗口形式
2、QDialog:是对话窗口的基类,没有菜单栏、工具栏、状态栏
3、QWidget:不确定窗口的用途,就使用QWidget
import sys
# from typing import Mapping
from PyQt5.QtWidgets import QApplication,QMainWindow
# 图标
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QFileInfo
import PyQt5.QtGui
# 定义一个新类FirstMainWin,继承父类QMainWindow
class FirstMainWin(QMainWindow):
def __init__(self):
super(FirstMainWin,self).__init__()
# 设置主窗口的标题
self.setWindowTitle("第一个主窗口")
# 设置主窗口的尺寸
self.resize(400,300)
# 获取状态栏
self.status = self.statusBar()
# 状态栏显示消息
self.status.showMessage('只存在5s的消息',5000)
if __name__ == '__main__':
app = QApplication(sys.argv)
# 获取图片的根路径,动态构造图片的位置
root = QFileInfo(__file__).absolutePath()
app.setWindowIcon(QIcon(root+'/icon/water.ico'))
main = FirstMainWin()
main.show()
sys.exit(app.exec_())
遇到了问题:
Q:PyQt5的图标icon怎么都显示不出来
A:检查路径,动态构造路径,来自这位哥哥的博客(https://blog.csdn.net/qq_38313386/article/details/85644935)