PyQt5 GUI应用程序工具包入门(3)—信号槽
上一讲,我们编制了一个简单的登录对话框。而真正的登录对话框需要将输入的用户名和密码发送出去,进行处理。PyQt通过信号(signal)和槽(slot)机制实现对象间的通信。具体方法为:由一个事件(如:单击控件)触发信号,槽函数接收到信号便自动执行。
QtDesigner中定义
定义内置信号槽
图1 QtDesigner中的信号槽定义
图1中,蓝色箭头的窗口中显示已有的信号槽,由于现在我们还没编辑任何信号槽,故此窗口中没有任何信号槽的定义。 单击图1中红色箭头所指的按钮即可进入信号槽编辑模式。即可定义信号槽。
图2 定义信号槽
进入信号槽编辑模式后,将鼠标从取消拖动到窗口的空白位置(如图2所示),松开鼠标,即弹出信号槽配置连接对话框(如图3所示)。
图3 信号槽配置连接对话框
将 “显示从QWidget继承的信号和槽选中”,即可显示所有的信号和槽。这里我们要使“取消”键按下时,窗口关闭。故左边的信号选择“clicked()”,右边的槽选择“close()”,单击确定,即可定义好“取消”按钮的信号槽。并显示在了信号/槽编辑器里(如图4所示)。
图4 信号槽配置效果
当然,我们也可以单击“信号/槽编辑器”中的+号直接添加信号槽选择发送控件、信号函数、接收控件和槽函数。
定义自定义信号槽
在本例中,单击确定键,槽函数需要将用户名和密码发送出去,故只能用自定义槽函数。和上一节一样进入信号槽编辑模式,通过拖动建立槽函数。然后在图3所示的信号槽配置连接对话框中单击“编辑”即进入如图5所示的自定义信号槽对话框。单击+号即可增加一个槽函数。然后在生成之后,在代码中定义相应的函数。
图5 自定义信号槽对话框
手写定义槽函数
手写定义槽函数非常简单,语法为:
发送者控件.信号函数.connect(槽函数)
例(取消键的信号槽函数):
self.pushButton_2.clicked.connect(Form.close)
书写自定义函数时,只需在Ui_Form类中,定义一个自定义函数即可。 我们将上一节的对话框,扩展如下:
# -*- 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:”进行包装,否则会出错。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- centos 7 修改sshd | 禁止 root登录及sshd端口脚本定义
- Linux 全能系统监控工具dstat的实例详解
- 解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题
- linux常用工具vi/vim的使用完整版
- Linux下监视NVIDIA的GPU使用情况详解
- Linux下安装jdk1.8并配置环境变量的教程
- Linux中Homebrew的正确使用方法
- Linux中awk的使用方法详解
- Django上线部署之Apache的方法
- centos7系统下python2与python3共存
- linux把一个文件的内容复制到另一个文件的末尾
- 详解linux下nohup日志输出过大问题解决方案
- K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问
- linux模糊查找文件用什么命令比较好
- Ubuntu14.04服务器环境下配置PHP7.0+Apache2+Mysql5.7的方法