python - 如何在 PyQt5 QTableWidgetItem 中管理数据的可见性
问题描述
我想让一些数据隐藏在 QTableWidget 中,直到单击特定单元格。现在我只设法显示“*”而不是实际值。我认为当单击特定单元格并替换单击的单元格的值时,我可以以某种方式与操作联系起来。我也知道有一个函数 setData() 可以在 QTableWidgetItem 上调用并给我想要的行为。但我找不到任何有用的 Python 实现 qt 的例子。这个问题的最佳解决方案是什么?
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()
解决方案
您可以将标志与指示文本可见性的角色相关联,然后使用委托隐藏文本。按下项目时,该标志将更改:
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_())
推荐阅读
- scala - Databricks:循环数据框并放入变量
- android - 如何在应用程序上禁用 TECH_DISCOVERED?
- typescript - 使用泛型参数定义已声明函数的属性
- javascript - 在 JXA/JavaScript 中将 PNG 编码/解码为 base64 字符串
- ruby - Ruby - 解包混合类型的数组
- java - 错误:无法解决:com.michaelpardo:activeandroid:3.1.0-SNAPSHOT 在项目结构对话框中显示受影响的模块:app
- python - 从 docker 容器构建和发布 python 库的更好方法是什么?
- python - 如何用张量实例化神经网络参数?
- javascript - 每次在命令行中运行 gulp 时出现断言错误
- javascript - 是否可以使用客户端脚本语言打开安装在客户端计算机上的应用程序