首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PyQt5:文本输入栏3

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

最后

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180301G0TTB400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券