【问题标题】:Mask text after character in QListWidgetQListWidget中字符后的屏蔽文本
【发布时间】:2021-10-10 15:48:59
【问题描述】:

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

例子:

List item | username:password

我想要什么:

List Item (Password is still there but hidden) | username

这只是为了让 UI 更干净,是否有任何内置的 PyQT 函数可以帮助我实现这一点,或者我是否必须使用 Python 提出其他解决方案?可重现的示例只是一个 QListWidget,其中包含 : 的项目。

【问题讨论】:

    标签: python pyqt mask qlistwidget


    【解决方案1】:

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

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

    【讨论】:

    • 这真的很酷,但我特别希望它做的是让分隔符后面的字符不可见,而不是密码字符。编辑:想通了,只是将 mask_character 更改为 "" 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 2017-12-15
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多