带有屏蔽密码列的 QTableWidget
QTableWidget with a masked password column
是否可以屏蔽某些包含密码的单元格或我使用 PyQt5 创建的 QTableWidget 中的列。我在这里找不到任何选项,搜索也没有提出任何解决方案。
一种可能的解决方案是通过委托更改显示的文本:
from PyQt5 import QtWidgets
class PasswordDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
if index.column() == 0:
style = option.widget.style() or QtWidgets.QApplication.style()
hint = style.styleHint(QtWidgets.QStyle.SH_LineEdit_PasswordCharacter)
option.text = chr(hint) * len(option.text)
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
view = QtWidgets.QTableWidget(10, 4)
delegate = PasswordDelegate(view)
view.setItemDelegate(delegate)
for i in range(view.rowCount()):
it = QtWidgets.QTableWidgetItem()
it.setText("password-{}".format(i))
view.setItem(i, 0, it)
view.show()
view.resize(640, 480)
sys.exit(app.exec_())
if __name__ == "__main__":
main()
感谢@eyllanesc 的分享,我实际上能够通过
在我的 tableview 和其他地方的特定列上重用它
class PasswordDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
style = option.widget.style() or QtWidgets.QApplication.style()
hint = style.styleHint(QtWidgets.QStyle.SH_LineEdit_PasswordCharacter)
option.text = chr(hint) * len(option.text)
这使得我不必对 class 中的列进行硬编码,而只需将委托应用于表视图或模型中我希望它适用的特定列。通过 setItemDelegateForColumn
查看更多相关信息 here
self.password_delegate = PasswordDelegate()
self.tableView_connections.setItemDelegateForColumn(4, self.password_delegate)
是否可以屏蔽某些包含密码的单元格或我使用 PyQt5 创建的 QTableWidget 中的列。我在这里找不到任何选项,搜索也没有提出任何解决方案。
一种可能的解决方案是通过委托更改显示的文本:
from PyQt5 import QtWidgets
class PasswordDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
if index.column() == 0:
style = option.widget.style() or QtWidgets.QApplication.style()
hint = style.styleHint(QtWidgets.QStyle.SH_LineEdit_PasswordCharacter)
option.text = chr(hint) * len(option.text)
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
view = QtWidgets.QTableWidget(10, 4)
delegate = PasswordDelegate(view)
view.setItemDelegate(delegate)
for i in range(view.rowCount()):
it = QtWidgets.QTableWidgetItem()
it.setText("password-{}".format(i))
view.setItem(i, 0, it)
view.show()
view.resize(640, 480)
sys.exit(app.exec_())
if __name__ == "__main__":
main()
感谢@eyllanesc 的分享,我实际上能够通过
在我的 tableview 和其他地方的特定列上重用它class PasswordDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
style = option.widget.style() or QtWidgets.QApplication.style()
hint = style.styleHint(QtWidgets.QStyle.SH_LineEdit_PasswordCharacter)
option.text = chr(hint) * len(option.text)
这使得我不必对 class 中的列进行硬编码,而只需将委托应用于表视图或模型中我希望它适用的特定列。通过 setItemDelegateForColumn
查看更多相关信息 here
self.password_delegate = PasswordDelegate()
self.tableView_connections.setItemDelegateForColumn(4, self.password_delegate)