QLineEdit密码输入时设置密文显示和切换明文
在很多项目中我们会使用QLineEdit来实现密码输入,但这时一定要设置密文显示,同时还要方便用户切换明文需求。虽然QLineEdit相应的方法,但是如何实现这个小案例呢?下面来演示一下。
在很多项目中我们会使用QLineEdit来实现密码输入,但这时一定要设置密文显示,同时还要方便用户切换明文需求。虽然QLineEdit相应的方法,但是如何实现这个小案例呢?下面来演示一下。
首先,我们需要准备一些素材,这里没有找到什么好看的图标,使用2章小图片来简单代替一下,能讲明意思就行。
这里我们是通过鼠标点击实现上面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_())