大栗子

实现了三种密码输入框的方式:
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 密码输入框相关推荐

  1. pyqt5如何循环遍历控件名_如何用 PyQt5 快速构建一个简单的 GUI 应用

    点击上方"Python全家桶","星标"或"置顶" 关键时刻,第一时间送达 本文已获授权,欢迎分享转发 1. 介绍 Python GUI 常 ...

  2. [转载] 如何用 PyQt5 快速构建一个简单的 GUI 应用

    参考链接: Python | 使用PyQt设计GUI应用程序 点击上方"AirPython",选择"加为星标" 第一时间关注 Python 技术干货! 1. 介 ...

  3. 【Python】基于人脸识别的智能考勤系统(Pyqt5+MySQL+Opencv) [PC端部分-已附源码]

    [Python]基于人脸识别的考勤系统 [PC端部分] 一.项目简介 本项目编程语言Python3.6,编程工具pycharm,其他工具QT Designer.Navicat,表单信息保存在本地MyS ...

  4. PyQt5开发的数据编辑器(一)

    前言 一直在做游戏服务器的开发工作,很多时候都要与数据打交道,很多数据都是手动修改,费时间也不易维护.一直想写一个工具一键导出游戏数据,不知从何写起:恰好现在新开发游戏,开发新游戏的同时,也写一个简简 ...

  5. Pyqt5+python2.7 美观的登陆界面制作(二)

    简介 继上一篇的安装,这一篇主要讲下登陆界面的制作,之后也会把自己做毕业设计中在csdn上没有找到自己解决的一些界面上的问题解决方法共享出来,最近事情比较多,更新会有点慢,但还是希望能对大家有帮助啦. ...

  6. pyqt5多界面切换,关联数据库校验,注册登录修改密码操作练习

    pyqt5多界面切换,关联数据库校验,注册登录修改密码操作练习import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWi ...

  7. 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 清 ...

  8. Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建

    Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...

  9. pycharm+PyQt5+python最新开发环境配置,踩坑过程详解

    安装工具: Pycharm 专业版2017.3 PyQT5 python3 pyqt5-tools 设置扩展工具的参数找到setting->tools->external tools,点击 ...

最新文章

  1. Html 内联元素、外联元素 和 可变元素
  2. 【Python-ML】SKlearn库层次聚类凝聚AgglomerativeClustering模型
  3. 0315互联网新闻 | 小红书测试短视频产品“hey”;华为与故宫共同打造“5G智慧故宫”...
  4. XML文档注释(C#)
  5. 你真的适合做前端吗?自学入行的那些坑
  6. 手写模拟器,将电子文档转换为手写字体,就用这个软件
  7. 传统人工势场法---经典算法
  8. 全国离婚率下跌约五成是因为它?
  9. 习题4-7 最大公约数和最小公倍数 (15分)
  10. JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库
  11. Java添加一个滑动验证码,有啥可难的,分分钟加一个
  12. 中国第一批程序员的“青春饭”已经恰完了,35+的程序员该何去何从?
  13. 使用 javaScript 编写倒计时小程序,到时提交表单
  14. 操作系统复习大纲笔记
  15. ASP.Net中生成静态HTML页
  16. Neurocomputing模板下载及编译
  17. OpenCV 获取摄像头并显示摄像头视频
  18. unity预制体与非预制体的区别
  19. PHP数组函数extract 使用详解
  20. Struts2 拦截器中实现对数据进行数据库操作

热门文章

  1. 【SPSS】【Python】“发生严重错误客户端无法再与服务器通信”无法导入表格
  2. MSSQLSERVER 2019修改数据库文件存放路径的简单实现
  3. php的知识体系结构图,高中英语全部知识体系结构图汇总
  4. 计算机网络安全工作室介绍,计算机网络技术专业 “网络工作室”做法简介
  5. 【CVPR2020视频超分辨率】Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resolution 阅读笔记
  6. Unity 移动键Q的三种用法 For Mac,Windows类同
  7. 缺失msvcr120.dll一般性问题如何解决
  8. python hdf5_使用Python将大量数字写入HDF5文件
  9. 实用的语音转文字转换器,告别文件转换难题
  10. 4K电视与4K显示器区别?对比测试!