前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt5 GUI应用程序工具包入门(3)—信号槽

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

作者头像
Python中文社区
发布2018-03-26 16:18:02
1.6K0
发布2018-03-26 16:18:02
举报
文章被收录于专栏:Python中文社区Python中文社区

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

QtDesigner中定义

定义内置信号槽

图1 QtDesigner中的信号槽定义

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

图2 定义信号槽

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

图3 信号槽配置连接对话框

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

图4 信号槽配置效果

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

定义自定义信号槽

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

图5 自定义信号槽对话框

手写定义槽函数

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

代码语言:javascript
复制
发送者控件.信号函数.connect(槽函数)

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

代码语言:javascript
复制
self.pushButton_2.clicked.connect(Form.close)

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

代码语言:javascript
复制
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QWidget,QFormLayout,QLabel,QLineEdit,QPushButton

class Ui_Form(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("登录界面")
        self.resize(200,100)
        lay=QFormLayout()
        Lab1=QLabel("用户名")
        self.Line1=QLineEdit()
        lay.addRow(Lab1,self.Line1)
        Lab2 = QLabel("密码")
        self.Line2 = QLineEdit()
        lay.addRow(Lab2, self.Line2)
        OkB=QPushButton("确定")
        CB=QPushButton("取消")
        lay.addRow(OkB,CB)
        self.setLayout(lay)

        CB.clicked.connect(lambda :self.close())
        OkB.clicked.connect(lambda :self.SendUserInf())

    def SendUserInf(self):
        print("用户名:",self.Line1.text())
        print("密码:",self.Line2.text())

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • QtDesigner中定义
    • 定义内置信号槽
      • 定义自定义信号槽
      • 手写定义槽函数
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档