在 QListWidget 中的字符后屏蔽文本
Mask text after character in QListWidget
我有一个 QListWidget,我想在第一个 : 之后隐藏所有文本:而完整的字符串仍然供我使用,用于所有项目。
示例:
List item | username:password
我想要的:
List Item (Password is still there but hidden) | username
这只是为了让 UI 更干净,是否有任何内置的 PyQT 函数可以帮助我实现这一点,或者我是否必须使用 Python 提出一些其他解决方案?可重现的例子只是一个 QListWidget,其中的项目有 : in them.
一种可能的解决方案是使用委托:
import sys
from PyQt5 import QtCore, QtWidgets
class Delegate(QtWidgets.QStyledItemDelegate):
def displayText(self, value, locale):
text = super().displayText(value, locale)
separator = ":"
values = text.split(separator)
if len(values) == 2:
username, password = values
mask_character = chr(
QtWidgets.QApplication.style().styleHint(
QtWidgets.QStyle.SH_LineEdit_PasswordCharacter
)
)
return separator.join([username, mask_character * len(password)])
return text
def main():
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QListWidget()
delegate = Delegate(w)
w.setItemDelegate(delegate)
w.show()
for i in range(10):
text = f"username{i}:password{i}"
item = QtWidgets.QListWidgetItem(text)
item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
w.addItem(item)
sys.exit(app.exec_())
if __name__ == "__main__":
main()
我有一个 QListWidget,我想在第一个 : 之后隐藏所有文本:而完整的字符串仍然供我使用,用于所有项目。
示例:
List item | username:password
我想要的:
List Item (Password is still there but hidden) | username
这只是为了让 UI 更干净,是否有任何内置的 PyQT 函数可以帮助我实现这一点,或者我是否必须使用 Python 提出一些其他解决方案?可重现的例子只是一个 QListWidget,其中的项目有 : in them.
一种可能的解决方案是使用委托:
import sys
from PyQt5 import QtCore, QtWidgets
class Delegate(QtWidgets.QStyledItemDelegate):
def displayText(self, value, locale):
text = super().displayText(value, locale)
separator = ":"
values = text.split(separator)
if len(values) == 2:
username, password = values
mask_character = chr(
QtWidgets.QApplication.style().styleHint(
QtWidgets.QStyle.SH_LineEdit_PasswordCharacter
)
)
return separator.join([username, mask_character * len(password)])
return text
def main():
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QListWidget()
delegate = Delegate(w)
w.setItemDelegate(delegate)
w.show()
for i in range(10):
text = f"username{i}:password{i}"
item = QtWidgets.QListWidgetItem(text)
item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
w.addItem(item)
sys.exit(app.exec_())
if __name__ == "__main__":
main()