导图社区 PyQt
此为PYQT5的学习资料,pyqt5是pyhton GUI编程的首选软件。整理的资料通俗易懂。适合快速入门。
编辑于2020-07-10 19:50:35PyQt
信号与槽
信号与槽的使用
信号与槽有三种使用方法
第一种是内置信号与槽的使用
所谓内置信号与槽的使用,是指在发射信号时,使用窗口控件的函数,而不是自定义的函数。在信号与槽中,可以通过 QObject.signal.connect 将一个 QObject 的信号连接到另一个 QObject 的槽函数
from PyQt5.QtWidgets import QPushButton ,QApplication,QWidget
from PyQt5.QtWidgets import QMessageBox
import sys
import sys
app=QApplication([])
widget=QWidget()
def showMsg():
QMessageBox.information(widget,"信息提示框","ok,弹出测试信息")
btn=QPushButton( "测试点击按钮",widget)
btn.clicked.connect(showMsg)
widget.show()
sys.exit(app.exec_())
这个例子将一个按钮对象的内置 clicked 信号连接到自定义的槽函数showMsg(),也可以说showMsg()函数响应了一个按钮单击事件。单击“测试点击按钮”按钮,就会弹出一个信息提示框
第二种是自定义信号与槽的使用
所谓自定义信号与槽的使用,是指在发射信号时,不使用窗口控件的函数,而是使用自定义的函数
简单地说,就是使用 pyqtSignal 类实例发射信号)
第三种是装饰器的信号与槽的使用。由于第三种方法本质上是第一种方法的衍生
子主题
定义信号
PyQt 的内置信号是自动定义的。使用 PyQt5.QtCore.pyqtSignal()函数可以为QObject 创建一个信号,使用 pyqtSingnal()函数可以把信号定义为类的属性
为QObject对象创建信号
使用pyqtSignal()函数创建一个或多个重载的未绑定的信号作为类的属性,信号只能在QObject的子类中定义,
信号必须在类创建时定义,不能在类创建后作为类的属性动态添加进来。types参数表示定义信号时参数的类型,name参数表示信号名字,该项缺省时使用类的属性名字。

使用pyqtSignal()函数创建信号时,信号可以传递多个参数,并指定信号传递参数的类型,参数类型是标准的Python数据类型(字符串、日期、布尔类型、数字、列表、元组和字典)
为控件创建信号
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QMainWindow
class WinForm(QMainWindow):
btnClickedSignal=pyqtSignal()
上面代码为自定义控件WinForm创建了一个btnClickedSignal信号
操作信号
使用connect()函数可以把信号绑定到槽函数上
使用disconnect()函数可以解除信号与槽函数的绑定
使用emit()函数可以发射信号
窗口介绍
属性
objectName,控件对象名称。
● geometry,相对坐标系。
● sizePolicy,控件大小策略。
● minimumSize,最小宽度、高度。
● maximumSize,最大宽度、高度。如果想让窗口或控件的大小固定,则可以将minimumSize和maximumSize这两个属性设置成一样的数值。
● font,字体。
● cursor,光标。
● windowTitle,窗口标题。
● windowsIcon/icon,窗口图标/控件图标。
● iconSize,图标大小。
● toolTip,提示信息。
● statusTip,任务栏提示信息。
● text,控件文本。
● shortcut,快捷键。
信号/槽编辑器、动作编辑器和资源浏览器

信号/槽编辑器
可以为控件添加自定义的信号和槽函数,编辑控件的信号和槽函数
资源浏览器
可以为控件添加图片,比如Label、Button的背景图片
Qt Designer布局的顺序
(1)将一个窗口控件拖入窗口中并放置在大致正确的位置上。除了容器(container)窗口,一般不需要调整窗口的尺寸大小。
(2)对于要用代码引用的窗口控件,应指定一个名字;对于需要微调的窗口控件,可以设置其对应的属性。
(3)重复步骤1和2,直到所需要的全部窗口控件都放到了窗口中。
(4)如有需要,在窗口控件之间可以用 Vertical Spacer、Horizontal Spacer、Horizontal Line、Vertical Line隔开(实际上前两步就可以包含这部分内容)。
(5)选择需要布局的窗口控件,使用布局管理器或者切分窗口(splitter)对它们进行布局。
(6)重复步骤5,直到所有的窗口控件和分隔符都布局好为止。
(7)单击窗口,并使用布局管理器对其进行布局。
(8)为窗口的标签设置伙伴关系。
(9)如果按键次序有问题,则需要设置窗口的Tab键次序。
(10)在适当的地方为内置的信号和槽建立信号与槽连接。
(11)预览窗口,并检查所有的内容能否按照设想进行工作。
(12)设置窗口的对象名(在类中会用到这个名字)、窗口的标题并进行保存
(13)使用 Eric 或有类似功能的工具(如在命令行中使用 pyuic5)编译窗口,然后根据需要生成对话框代码
(14)进行正常的代码编写工作,即编写业务逻辑文件。
minimumSize和maximumSize属性题
minimumSize和maximumSize属性用来设置控件在布局管理器中的 最小尺寸和最大尺寸
sizePolicy属性
● Fixed:窗口控件具有其sizeHint所提示的尺寸且尺寸不会再改变。
● Minimum:窗口控件的 sizeHint 所提示的尺寸就是它的最小尺寸;该窗口控件不能被压缩得比这个值小,但可以变得更大。
● Maximum:窗口控件的sizeHint所提示的尺寸就是它的最大尺寸;该窗口控件不能变得比这个值大,但它可以被压缩到minisizeHint给定的尺寸大小。
● Preferred:窗口控件的 sizeHint 所提示的尺寸就是它的期望尺寸;该窗口控件可以缩小到minisizeHint所提示的尺寸,也可以变得比sizeHint所提示的尺寸还要大。
● Expanding:窗口控件可以缩小到minisizeHint所提示的尺寸,也可以变得比sizeHint所提示的尺寸大,但它希望能够变得更大。
● MinimumExpanding:窗口控件的sizeHint所提示的尺寸就是它的最小尺寸;该窗口控件不能被压缩得比这个值还小,但它希望能够变得更大。
● Ignored:无视窗口控件的 sizeHint 和 minisizeHint 所提示的尺寸,按照默认来设置。
值得注意的是,Minimum指的是该窗口控件的尺寸不能低于sizeHint所提示的尺寸;Maximum指的是该窗口控件的尺寸不能高于sizeHint所提示的尺寸。这与我们平常所理解的Minimum和Maximum的含义有些差别
信号和槽关联
信号(signal)和槽(slot)是Qt的核心机制。在创建事件循环之后,通过建立信号和槽的连接就可以实现对象之间的通信。当信号发射(emit)时,连接的槽函数将会自动执行。在PyQt 5中,信号和槽通过QObject.signal.connect()连接。
菜单栏与工具栏
MainWindow 即主窗口,主要包含菜单栏、工具栏、任务栏等。双击菜单栏上的“在这里输入”,然后输入文字,最后按回车键即可生成菜单。对于一级菜单,可以通过输入“文件(&F)”和“编辑(&E)”来加入菜单的快捷键
注意:要按回车键来确认菜单的输入。
使用Qt Designer默认生成的主窗口中不显示工具栏,可以通过单击鼠标右键来添加工具栏
Ctrl+R 预览窗口
使用Qt Designer加载资源文件
在Qt Designer中设计界面时是不能直接加入图片和图标等资源的,而是需要在PyQt开发目录下编写.qrc文件
可以用文本编辑器打开扩展名为.qrc的资源文件
新建一个资源文件apprcc.qrc,它的内容如下: ﹤rcc version="1.0"﹥ ﹤qresource﹥ ﹤/qresource﹥ ﹤/rcc﹥
PyQt 5基本窗口控件
按钮
添加背景图
styleSheet
boder-image
代码解释
import sys
from PyQt5.QtWidgets import QApplication,QWidget
这两行代码用来载入必需的模块。在 Qt5 中使用的基本的 GUI 窗口控件都在PyQt5.QtWidgets模块中。
app=QApplication(sys.argv)
每一个 PyQt5 程序都需要有一个 QApplication 对象,QApplication 类包含在QTWidgets模块中。sys.argv 是一个命令行参数列表。Python脚本可以从Shell中执行,比如双击 .py脚本文件,通过参数来选择启动脚本的方式。
window=QWidget()
QWidget 控件是 PyQt5 中所有用户界面类的父类。这里使用了没有参数的默认构造函数,它没有继承其他类。我们称没有父类的控件为窗口。
需要注意的是,窗口和控件都继承自QWidget类,如果不为控件指定一个父对象,那么该控件就会被当作窗口处理,这时 setWindowTitle() 和 setWindowIcon() 函数就会生效。
window.resize(300,200)
使用resize()方法可以改变窗口控件的大小,在这里设置窗口的宽度为300像素,高度为200像素。
window.move(250,150)
使用move()方法可以设置窗口初始化的位置(x,y)。
窗口的坐标系统就像手机屏幕一样,在iOS、Android和Windows Phone的UI坐标布局中:
坐标系统在屏幕左上角,(0,0)为原点。
x是从左到右递增的。
y是从上到下递增的。
窗口类型介绍
QMainWindow、QWidget和QDialog三个类都是用来创建窗口的,可以直接使用,也可以继承后再使用。
QDialog 是对话框窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它可以是模态的,也可以是非模态的。QDialog窗口没有菜单栏、工具栏、状态栏等
QMainWindow
QMainWindow窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,也可以说是GUI程序的主窗口。
QWidget
基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口和控件都直接或间接继承自QWidget类
QWidget直接提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得客户区的宽度和高度。
QWidget 的 geometry()提供的成员函数:x()、y()获得客户区左上角的坐标,width()、height()获得客户区的宽度和高度。
QWidget的frameGeometry()提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得包含客户区、标题栏和边框在内的整个窗口的宽度和高度。
窗口坐标系统
PyQt 使用统一的坐标系统来定位窗口控件的位置和大小
以屏幕的左上角为原点,即(0,0)点,从左向右为x轴正向,从上向下为y轴正向,整个屏幕的坐标系统就用来定位顶层窗口的
在窗口内部也有自己的坐标系统,该坐标系统仍然以左上角作为原点,从左向右为x轴正向,从上向下为y轴正向,原点、x轴、y轴围成的区域叫作Client Area(客户区),在客户区的周围则是标题栏(Window Title)和边框(Frame)

为应用设置程序图标
easyicon网站(http://www.easyicon.net/)免费下载PNG、ICO、ICNS格式的图标搜