gpt4 book ai didi

python - 如何管理 PyQt5 QTableWidgetItem 中数据的可见性

转载 作者:行者123 更新时间:2023-12-01 00:10:47 25 4
gpt4 key购买 nike

我想让一些数据隐藏在 QTableWidget 中,直到单击特定单元格为止。现在我只能显示“*”而不是实际值。我认为当单击特定单元格并替换单击单元格的值时,我可以以某种方式与操作连接。我还知道有一个函数 setData() 可以在 QTableWidgetItem 上调用并给我想要的行为。但我找不到任何有用的 qt 的 Python 实现示例。这个问题的最佳解决方案是什么?

def setTableValues(self):
self.table.setRowCount(len(self.tableList))
x = 0
for acc in self.tableList:
y = 0
for val in acc.getValuesAsList():
if isinstance(val,Cipher):
val = "*"*len(val.getDecrypted())
item = QTableWidgetItem(val)
self.table.setItem(x,y,item)
y += 1
x += 1
self.table.resizeRowsToContents()
self.table.resizeColumnsToContents()

最佳答案

您可以将标志与指示文本可见性的角色相关联,然后使用委托(delegate)来隐藏文本。当按下项目时,该标志将会改变:

from PyQt5 import QtCore, QtGui, QtWidgets

VisibilityRole = QtCore.Qt.UserRole + 1000


class VisibilityDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
if not index.data(VisibilityRole):
option.text = "*" * len(option.text)


class TableWidget(QtWidgets.QTableWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
delegate = VisibilityDelegate(self)
self.setItemDelegate(delegate)
self.visibility_index = QtCore.QModelIndex()
self.pressed.connect(self.on_pressed)

@QtCore.pyqtSlot(QtCore.QModelIndex)
def on_pressed(self, index):
if self.visibility_index.isValid():
self.model().setData(self.visibility_index, False, VisibilityRole)
self.visibility_index = index
self.model().setData(self.visibility_index, True, VisibilityRole)


if __name__ == "__main__":
import sys

app = QtWidgets.QApplication(sys.argv)

w = TableWidget(10, 4)
for i in range(w.rowCount()):
for j in range(w.columnCount()):
it = QtWidgets.QTableWidgetItem("{}-{}".format(i, j))
w.setItem(i, j, it)
w.show()
w.resize(640, 480)

sys.exit(app.exec_())

关于python - 如何管理 PyQt5 QTableWidgetItem 中数据的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59645024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com