PyQt5 GUI应用程序工具包入门(3)—信号槽

PyQt5 GUI应用程序工具包入门(3)—信号槽

上一讲,我们编制了一个简单的登录对话框。而真正的登录对话框需要将输入的用户名和密码发送出去,进行处理。PyQt通过信号(signal)和槽(slot)机制实现对象间的通信。具体方法为:由一个事件(如:单击控件)触发信号,槽函数接收到信号便自动执行。

QtDesigner中定义

定义内置信号槽

PyQt5 GUI应用程序工具包入门(3)—信号槽
图1 QtDesigner中的信号槽定义

图1中,蓝色箭头的窗口中显示已有的信号槽,由于现在我们还没编辑任何信号槽,故此窗口中没有任何信号槽的定义。
单击图1中红色箭头所指的按钮即可进入信号槽编辑模式。即可定义信号槽。

PyQt5 GUI应用程序工具包入门(3)—信号槽图2 定义信号槽

进入信号槽编辑模式后,将鼠标从取消拖动到窗口的空白位置(如图2所示),松开鼠标,即弹出信号槽配置连接对话框(如图3所示)。

PyQt5 GUI应用程序工具包入门(3)—信号槽图3 信号槽配置连接对话框

将 “显示从QWidget继承的信号和槽选中”,即可显示所有的信号和槽。这里我们要使“取消”键按下时,窗口关闭。故左边的信号选择“clicked()”,右边的槽选择“close()”,单击确定,即可定义好“取消”按钮的信号槽。并显示在了信号/槽编辑器里(如图4所示)。

PyQt5 GUI应用程序工具包入门(3)—信号槽图4 信号槽配置效果

当然,我们也可以单击“信号/槽编辑器”中的+号直接添加信号槽选择发送控件、信号函数、接收控件和槽函数。

定义自定义信号槽

在本例中,单击确定键,槽函数需要将用户名和密码发送出去,故只能用自定义槽函数。和上一节一样进入信号槽编辑模式,通过拖动建立槽函数。然后在图3所示的信号槽配置连接对话框中单击“编辑”即进入如图5所示的自定义信号槽对话框。单击+号即可增加一个槽函数。然后在生成之后,在代码中定义相应的函数。

PyQt5 GUI应用程序工具包入门(3)—信号槽
图5 自定义信号槽对话框

手写定义槽函数

手写定义槽函数非常简单,语法为:


  1. 发送者控件.信号函数.connect(槽函数)

例(取消键的信号槽函数):


  1. self.pushButton_2.clicked.connect(Form.close)

书写自定义函数时,只需在Ui_Form类中,定义一个自定义函数即可。 我们将上一节的对话框,扩展如下:


  1. # -*- coding: utf-8 -*-

  2. from PyQt5.QtWidgets import QWidget,QFormLayout,QLabel,QLineEdit,QPushButton

  3. class Ui_Form(QWidget):

  4.    def __init__(self):

  5.        super().__init__()

  6.        self.setWindowTitle("登录界面")

  7.        self.resize(200,100)

  8.        lay=QFormLayout()

  9.        Lab1=QLabel("用户名")

  10.        self.Line1=QLineEdit()

  11.        lay.addRow(Lab1,self.Line1)

  12.        Lab2 = QLabel("密码")

  13.        self.Line2 = QLineEdit()

  14.        lay.addRow(Lab2, self.Line2)

  15.        OkB=QPushButton("确定")

  16.        CB=QPushButton("取消")

  17.        lay.addRow(OkB,CB)

  18.        self.setLayout(lay)

  19.        CB.clicked.connect(lambda :self.close())

  20.        OkB.clicked.connect(lambda :self.SendUserInf())

  21.    def SendUserInf(self):

  22.        print("用户名:",self.Line1.text())

  23.        print("密码:",self.Line2.text())

代码说明: 第11、14行,在两个文本框前加“self.”,使其成为类变量,使得可以将文本发送出去。 第21、22行,定义两个按钮的信号槽。 第24~26行,定义“确定”键单击的事件。函数用“lambda:”进行包装,否则会出错。

赞赏作者

PyQt5 GUI应用程序工具包入门(3)—信号槽


本文作者

PyQt5 GUI应用程序工具包入门(3)—信号槽

小溪

土木工程硕士毕业,硕士期间利用Python进行数据处理和ABAQUS二次开发,现就职于上海某土木工程咨询公司,从事土木工程软件开发工作。

PyQt5 GUI应用程序工具包入门(3)—信号槽

PyQt5 GUI应用程序工具包入门(3)—信号槽

点击阅读原文,加入CodingGo编程社区更多阅读请点击:

PyQt5 GUI应用程序工具包入门(1)

PyQt5 GUI应用程序工具包入门(2)