PyQt5 密码输入框
大栗子
实现了三种密码输入框的方式:
1.输入的密码不可见;
2.输入的密码可见,但是鼠标点击其他控件后,密码不可见;
3.输入的密码不可见,同时为了更加的安全,屏蔽了鼠标右键、禁用复制、粘贴快捷键、鼠标在密码框中不可移动,不可全选。就类似我们在输入QQ密码的时候一样。
PasswdDialog
"""
其实大家从这段代码中我们可以看出,本质上就是QDialog的继承,加上自己希望的界面和实现的功能。因此QDialog所有的属性,我们自定义对话框PasswdDialog都会有,这样能够省掉我们不少的时间来。这个也就是面向对象编程的魅力所在了。
"""
#coding=utf-8
from PyQt5.QtWidgets import QDialog, QApplication, QLineEdit, QLabel, QPushButton, QHBoxLayout, QVBoxLayout, QMessageBox
from PyQt5.QtCore import Qt, QEvent, QRegExp, QObject
from PyQt5.QtGui import QKeyEvent, QKeySequence, QRegExpValidatorclass PasswdDialog(QDialog):def __init__(self):super().__init__()self.initUI()def initUI(self):self.resize(350,100)self.setWindowTitle("密码输入框")self.lb = QLabel("请输入密码:",self)self.edit = QLineEdit(self)self.edit.installEventFilter(self)self.bt1 = QPushButton("确定",self)self.bt2 = QPushButton("取消",self)hbox = QHBoxLayout()hbox.addStretch(1)hbox.addWidget(self.bt1)hbox.addStretch(1)hbox.addWidget(self.bt2)hbox.addStretch(1)vbox = QVBoxLayout()vbox.addWidget(self.lb)vbox.addWidget(self.edit)vbox.addStretch(1)vbox.addLayout(hbox)self.setLayout(vbox)
"""
这个三个语句是给密码输入框增加一些属性
"""self.edit.setContextMenuPolicy(Qt.NoContextMenu)#这个语句设置QLineEdit对象的上下文菜单的策略。复制,粘贴,。。。,是否可用self.edit.setPlaceholderText("密码不超15位,只能有数字和字母,必须以字母开头")#只要行编辑为空,设置此属性将使行编辑显示为灰色的占位符文本。默认情况下,此属性包含一个空字符串。这是非常好的使用方法,可以在用户输入密码前看到一些小提示信息,但是又不影响使用,非常棒这个方法。self.edit.setEchoMode(QLineEdit.Password)#这条语句设置了如何限定输入框中显示其包含信息的方式,这里设置的是:密码方式,即输入的时候呈现出原点出来。
"""
这三段代码大体意思就是说,运用正则表达式限定密码输入框字符接收的条件:
长度不能超过15位;
字母开头;
后面跟着的字符只能是字母或者数字。
"""regx = QRegExp("^[a-zA-Z][0-9A-Za-z]{14}$")#为给定的模式字符串构造一个正则表达式对象。validator = QRegExpValidator(regx, self.edit)#构造一个验证器,该父对象接受与正则表达式匹配的所有字符串。这里的父对象就是QLineEdit对象了。匹配是针对整个字符串; 例如:如果正则表达式是[A-Fa-f0-9]+将被视为^[A-Fa-f0-9]+$。self.edit.setValidator(validator)#将密码输入框设置为仅接受符合验证器条件的输入。 这允许您对可能输入的文本设置任何约束条件。因此我们这里设置的就是符合上面描述的三种约束条件。self.bt1.clicked.connect(self.Ok)self.bt2.clicked.connect(self.Cancel)object = QObject()
"""
事件过滤器可是一个非常重要的概念。根据Qt的官方文档,如果对象被安装已监视对象的事件过滤器,则过滤事件。如果要过滤事件,需重新实现此函数时,若停止进一步处理,返回true; 否则返回false。
如果一个对象安装多个事件过滤器,那么,最后安装的过滤器首先被激活。
""" def eventFilter(self, object, event):if object == self.edit:#这里是对事件的判断。其中QKeyEvent类描述了一个关键事件。当按下或释放按键时,主要事件将发送到具有键盘输入焦点的小部件。然后运用matches方法匹配具体的按键。if event.type() == QEvent.MouseMove or event.type() == QEvent.MouseButtonDblClick:return Trueelif event.type() == QEvent.KeyPress:key = QKeyEvent(event)if key.matches(QKeySequence.SelectAll) or key.matches(QKeySequence.Copy) or key.matches(QKeySequence.Paste):#然后进行事件判断与转换:鼠标移动对应的事件类型为QEvent.MouseMove,鼠标双击对应的事件类型为QEvent.MouseButtonDblClick,全选、复制、粘贴对应的事件类型为 QEvent.KeyPress,当接收到这些事件时,需要被过滤掉,所以返回true。return Truereturn QDialog.eventFilter(self, object, event)#继续传递该事件到被观察者,由其本身调用相应的事件def Ok(self):self.text = self.edit.text()if len(self.text) == 0:QMessageBox.warning(self, "警告", "密码为空")elif len(self.text) < 6:QMessageBox.warning(self, "警告", "密码长度低于6位")else:self.done(1) # 结束对话框返回1def Cancel(self):self.done(0) # 结束对话框返回0```
main
#coding=utf-8from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QLabel, QInputDialog, QTextBrowser, QLineEdit)
from PasswdDialog import PasswdDialog
import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.resize(380,180)self.setWindowTitle('早点毕业吧--自定义密码输入对话框')self.lb1 = QLabel('密码在此显示...',self)self.lb1.move(20,20)self.bt1 = QPushButton('输入密码(普通型)',self)self.bt1.move(20,60)self.bt2 = QPushButton('输入密码(普通加强型)',self)self.bt2.move(20,100)self.bt3 = QPushButton('输入密码(特别加强型)',self)self.bt3.move(20,140)self.show()self.bt1.clicked.connect(self.showDialog)self.bt2.clicked.connect(self.showDialog)self.bt3.clicked.connect(self.showDialog)def showDialog(self):sender = self.sender()if sender == self.bt1:text, ok = QInputDialog.getText(self, '密码输入框', '请输入密码:',QLineEdit.Password)if ok:self.lb1.setText(text)elif sender == self.bt2:text, ok = QInputDialog.getText(self, '密码输入框', '请输入密码:',QLineEdit.PasswordEchoOnEdit)if ok:self.lb1.setText(text)else:pwd = PasswdDialog()r = pwd.exec_()if r:self.lb1.setText(pwd.text)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())
具体运行结果参考:
https://zhuanlan.zhihu.com/p/30152208
谢谢 “学点编程吧”
PyQt5 密码输入框相关推荐
- pyqt5如何循环遍历控件名_如何用 PyQt5 快速构建一个简单的 GUI 应用
点击上方"Python全家桶","星标"或"置顶" 关键时刻,第一时间送达 本文已获授权,欢迎分享转发 1. 介绍 Python GUI 常 ...
- [转载] 如何用 PyQt5 快速构建一个简单的 GUI 应用
参考链接: Python | 使用PyQt设计GUI应用程序 点击上方"AirPython",选择"加为星标" 第一时间关注 Python 技术干货! 1. 介 ...
- 【Python】基于人脸识别的智能考勤系统(Pyqt5+MySQL+Opencv) [PC端部分-已附源码]
[Python]基于人脸识别的考勤系统 [PC端部分] 一.项目简介 本项目编程语言Python3.6,编程工具pycharm,其他工具QT Designer.Navicat,表单信息保存在本地MyS ...
- PyQt5开发的数据编辑器(一)
前言 一直在做游戏服务器的开发工作,很多时候都要与数据打交道,很多数据都是手动修改,费时间也不易维护.一直想写一个工具一键导出游戏数据,不知从何写起:恰好现在新开发游戏,开发新游戏的同时,也写一个简简 ...
- Pyqt5+python2.7 美观的登陆界面制作(二)
简介 继上一篇的安装,这一篇主要讲下登陆界面的制作,之后也会把自己做毕业设计中在csdn上没有找到自己解决的一些界面上的问题解决方法共享出来,最近事情比较多,更新会有点慢,但还是希望能对大家有帮助啦. ...
- pyqt5多界面切换,关联数据库校验,注册登录修改密码操作练习
pyqt5多界面切换,关联数据库校验,注册登录修改密码操作练习import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWi ...
- PyQt5 基本语法(四):输入控件
文章目录 2. 输入控件(一) 2.1 纯键盘 2.1.1 QLineEdit 2.1.1.1 描述 2.1.1.2 控件创建 2.1.1.3 输出模式 2.1.1.4 提示字符串 2.1.1.5 清 ...
- Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建
Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...
- pycharm+PyQt5+python最新开发环境配置,踩坑过程详解
安装工具: Pycharm 专业版2017.3 PyQT5 python3 pyqt5-tools 设置扩展工具的参数找到setting->tools->external tools,点击 ...
最新文章
- Html 内联元素、外联元素 和 可变元素
- 【Python-ML】SKlearn库层次聚类凝聚AgglomerativeClustering模型
- 0315互联网新闻 | 小红书测试短视频产品“hey”;华为与故宫共同打造“5G智慧故宫”...
- XML文档注释(C#)
- 你真的适合做前端吗?自学入行的那些坑
- 手写模拟器,将电子文档转换为手写字体,就用这个软件
- 传统人工势场法---经典算法
- 全国离婚率下跌约五成是因为它?
- 习题4-7 最大公约数和最小公倍数 (15分)
- JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库
- Java添加一个滑动验证码,有啥可难的,分分钟加一个
- 中国第一批程序员的“青春饭”已经恰完了,35+的程序员该何去何从?
- 使用 javaScript 编写倒计时小程序,到时提交表单
- 操作系统复习大纲笔记
- ASP.Net中生成静态HTML页
- Neurocomputing模板下载及编译
- OpenCV 获取摄像头并显示摄像头视频
- unity预制体与非预制体的区别
- PHP数组函数extract 使用详解
- Struts2 拦截器中实现对数据进行数据库操作
热门文章
- 【SPSS】【Python】“发生严重错误客户端无法再与服务器通信”无法导入表格
- MSSQLSERVER 2019修改数据库文件存放路径的简单实现
- php的知识体系结构图,高中英语全部知识体系结构图汇总
- 计算机网络安全工作室介绍,计算机网络技术专业 “网络工作室”做法简介
- 【CVPR2020视频超分辨率】Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resolution 阅读笔记
- Unity 移动键Q的三种用法 For Mac,Windows类同
- 缺失msvcr120.dll一般性问题如何解决
- python hdf5_使用Python将大量数字写入HDF5文件
- 实用的语音转文字转换器,告别文件转换难题
- 4K电视与4K显示器区别?对比测试!