<p>另一种可能是将可检查的QAction添加到QLineEdit并连接到<code>toggled</code>(或<code>triggered</code>)信号</p>
<p><a href="https://i.stack.imgur.com/M9DBw.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/M9DBw.png" alt="password field with embedded button"/></a></p>
<pre><code>class MyWindow(QtWidgets.QMainWindow):
def __init__(self, maxWidth=None):
super(MyWindow, self).__init__()
uic.loadUi('MainWindow.ui', self)
icon = QtGui.QIcon('eye-icon.png')
self.showPassAction = QtWidgets.QAction(icon, 'Show password', self)
self.line_password.addAction(
self.showPassAction, QtWidgets.QLineEdit.TrailingPosition)
self.showPassAction.setCheckable(True)
self.showPassAction.toggled.connect(self.showPassword)
def showPassword(self, show):
self.line_password.setEchoMode(
QtWidgets.QLineEdit.Normal if show else QtWidgets.QLineEdit.Password)
</code></pre>
<p>如果只想在按下鼠标时显示密码,则不要连接到<code>toggled</code>信号,而是找到该操作的子QToolButton并连接到<code>pressed</code>和<code>released</code>。在这种情况下,操作不需要是可检查的</p>
<pre><code> self.line_password.addAction(
self.showPassAction, QtWidgets.QLineEdit.TrailingPosition)
showPassButton = self.line_password.findChild(QtWidgets.QAbstractButton)
showPassButton.pressed.connect(lambda: self.showPassword(True))
showPassButton.released.connect(lambda: self.showPassword(False))
</code></pre>