python - QListWidget中字符后的屏蔽文本

标签 python pyqt mask qlistwidget

我有一个 QListWidget ,我想隐藏第一个之后的所有文本:虽然完整的字符串仍然存在供我使用,但对于所有项目。
例子:

List item | username:password
我想要的是:
List Item (Password is still there but hidden) | username
这只是为了使 UI 更干净,是否有任何内置的 PyQT 函数可以帮助我实现这一点,或者我是否必须使用 Python 提出其他解决方案?可重现的示例只是一个 QListWidget ,其中包含 : 的项目。

最佳答案

一种可能的解决方案是使用委托(delegate):

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()

关于python - QListWidget中字符后的屏蔽文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68669908/

相关文章:

python - 如何在Python/PyQt5中仅获取用户定义的类?

python - 如何使用方向键触发PyQt4事件

python - 在不同的 Linux 机器上部署 PyQt5 应用程序

css - 尝试创建一个没有剪辑路径的草率矩形

python - 我们如何在Python中进行DNS查询

python - 是否有一种只使用对象的模式?

python - 为什么 pandas xs 即使 drop_level = True 也不会降低级别

python - 如何从 Django 查询集中检索值?

javascript - 使用 RegExp 屏蔽字符串的一部分

jquery - 使用 css 和滚动动画创建伪对 Angular 线 mask