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:”进行包装,否则会出错。
- Docker系列教程10-使用Docker Registry管理镜像
- webapp开发调试环境--weinre配置
- AWK 深入浅出教程
- Docker系列教程09-使用Docker Hub管理镜像
- C++11基础学习系列一
- 触屏touchstart 与 click
- Linux DNS之dig利器
- Docker系列教程08-Dockerfile实战
- VirtualBox和Vmware安装增强功能
- 事件委托与阻止冒泡
- Linux网络工具之Ping命令
- Linux DNS之nslookup命令
- 【LEETCODE】模拟面试-108-Convert Sorted Array to Binary Search Tree
- javascript单线程环境实现真正的setTimeout
- 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 数组属性和方法
- Okhttp3实现爬取验证码及获取Cookie的示例
- Android监听系统来电并弹出提示窗口
- 你该知道的Gradle配置知识总结
- Android布局之绝对布局AbsoluteLayout详解
- django实现模型字段动态choice的操作
- 详解ASP.NET Core 处理 404 Not Found
- Python AutoCAD 系统设置的实现方法
- Python如何操作office实现自动化及win32com.client的运用
- android Palette调色板使用详解
- python 穷举指定长度的密码例子
- Android 高仿微信朋友圈拍照上传功能
- android的ListView点击item使item展开的做法的实现代码
- Android NavigationView头部设置监听事件
- android如何取得本地通讯录的头像的原图的实现代码
- 取消Android Studio项目与SVN关联的方法