PyQt5
29篇
文本输入栏(QLineEdit)3
导读:密码的设定
LEARN MORE
正文
这期我们继续介绍一下文本输入栏(QLineEdit),先期我们总体介绍了下QLineEdit,做了一个相关的演示,并对其常用属性、信号、函数介绍及举例。这期主要介绍一些自定义密码输入框。
还记得《PyQt5:构建我们自己的密码输入框》中三种密码的输入方式吗?效果图如下:
忘记了可以再去温习一下!
从实际使用的注册页面上看,一般用的比较多的是这样的(网易邮箱注册为例):
在《PyQt5: 文本输入栏(QLineEdit)1》中的视频中我们基本上实现了这个功能,在输入问题提示上没有网易邮箱那么全面,只是给出来了通用的提示信息。当然我们在输入上感知更好一些,先明后密,屏蔽了鼠标和关键键盘组合操作,更安全一些。
其实还有一个密码输入软键盘的问题,我已经设计好了,但是不属于这个知识点,不做讲解,等后期碰到相关的知识点再做讲解。
在本章我主要讲解一下密文如何实现先明后密的,至于判断两次密码是否一致,密码强度问题,只要设置好相应的正则表达式进行匹配就行了。
1
设计思路
当我们输入密码的时候,它显示的是明文,但是由于里面有一个时间机制在里面,一定时间内它会自动将文本输入框里面的内容覆盖为“*”,所以我们填写密码的时候就好像先是有明文紧接着变成密文样的。
流程大致如下图所示:
2
核心代码
这里我们继承了QLineEdit这个类并自定义一个新类PwdLineEdit。我们定义了两个成员变量:
分别用以记录真实的密码和密码出现变化前的长度。
在程序中我们用到了两个信号发射:
第一个信号是在光标发生移动时产生,返回两个整型变量并调用槽函数DisplayPasswordAfterEditSlot(),用以显示密文;
第二个信号是在文本编辑时产生,调用槽函数GetRealTextSlot(),用以记录真实的密码。
如何在让输入的明文自动的变成密文呢?我使用了QTimer类,设置超时时间是为200毫秒,然后自动调用DisplayPasswordSlot()。
这里的old和new分别表示光标移动前后的位置,要是new > old,明显就是在输入密码,增加密码长度;反之就是在删除密码字符。就是这个样子:
4.显示密文我们是怎么做到的呢?
我们判断输入的长度,然后用几个”*”覆盖掉,最后通过setText(),覆盖掉文本输入框。因为有时间延时,所以就好像每写一个就隐藏一个样的。很神奇是吧!
5. 还有最关键的步骤,记录真正的密码,也就是我们输入的内容。
当密码在输入的时候会自动的调用GetRealTextSlot()这个函数。
self.m_LastCharCount记录了当前没有变化时密码的长度。如果当前的长度大于之前记录的密码长度,很明显,密码在新增字符,所有实际密码是self.m_LineEditText += text[-1],即将新增的字符和原有的密码进行合并。
反之,就删除最后一个字符,所以就用到了self.m_LineEditText = self.m_LineEditText[:-1]。这句话要是大家不理解,我举个简单的例子就明白了。还是看下动画吧。注意看str的变化!
动画中字符串str是不断地减少的,其本质是每次取字符串第0位到最后一位(不含)的字符串。
3
其它
关于如何屏蔽鼠标右键或者键盘的一些操作,可以参见《PyQt5:构建我们自己的密码输入框》,这里就不再重复了。
4
最后
领取专属 10元无门槛券
私享最新 技术干货