Python GUI编程网 > PyQt5控件_PyQt5控件方法大全 > QLineEdit密码输入时设置密文显示和切换明文
python教程

QLineEdit密码输入时设置密文显示和切换明文

发布博客:2022年12月2日 07:00
阅读:79
作者:Python GUI编程网

在很多项目中我们会使用QLineEdit来实现密码输入,但这时一定要设置密文显示,同时还要方便用户切换明文需求。虽然QLineEdit相应的方法,但是如何实现这个小案例呢?下面来演示一下。

在很多项目中我们会使用QLineEdit来实现密码输入,但这时一定要设置密文显示,同时还要方便用户切换明文需求。虽然QLineEdit相应的方法,但是如何实现这个小案例呢?下面来演示一下。

首先,我们需要准备一些素材,这里没有找到什么好看的图标,使用2章小图片来简单代替一下,能讲明意思就行。

QLineEdit

QLineEdit

这里我们是通过鼠标点击实现上面2张图片的切换,所以要用到切换信号,但是在此之前我们还要学习一个动作对象QAction,下面是其构造。

class QAction(__PyQt5_QtCore.QObject):
    """
    QAction(parent: QObject = None)
    QAction(str, parent: QObject = None)
    QAction(QIcon, str, parent: QObject = None)
    """

通过这个对象我们添加一个图标,然后用信号来实现切换即可。

act = QAction(led)
act.setIcon(QIcon('close.png'))

先创建一个槽函数,槽中也要有动作对象。

def trg_act():
    act.setIcon(QIcon('open.png'))
act.triggered.connect(trg_act)

这时候实现了简单的切换动作,但是还有2个问题:首先是切换后有无法返回,其次是无法密文和明文切换显示。其实这两个问题也可以作为一个问题来处理,在前面的文章《QLineEdit使用方法大全》中我们说过QLineEdit中设置明文和密文使用QLineEdit本身所带的枚举值,同时QLineEdit还提供获取显示模式的方法echoMode(),通过这个就可以在切换时预先做一个判断。下面直接上完整代码:

from PyQt5.Qt import *
 import sys
 
 class Window(QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle("QLineEdit密文切换 - PyQt5中文网")
         self.resize(600, 500)
         self.func_list()
 
     def func_list(self):
         self.func()
 
     def func(self):
         self.led = QLineEdit(self)
         act = QAction(self.led)
         act.setIcon(QIcon('close.png'))
         self.led.setEchoMode(QLineEdit.Password)
         self.led.addAction(act, QLineEdit.TrailingPosition)
 
         def trg_act():
             if self.led.echoMode() == QLineEdit.Password:
                 self.led.setEchoMode(QLineEdit.Normal)
                 act.setIcon(QIcon('open.png'))
             else:
                 self.led.setEchoMode(QLineEdit.Password)
                 act.setIcon(QIcon('close.png'))
         act.triggered.connect(trg_act)
 
 
 if __name__ == '__main__':
     app = QApplication(sys.argv)
     window = Window()
 
     window.show()
     sys.exit(app.exec_())