python - 如何在 PyQt5 的 QTableWidgetItem 中使用 UserRole 设置数据

标签 python qt pyqt5

当我尝试使用QtCore.Qt.UserRolesetData存储数据时,它崩溃了:item.setData(QtCore. Qt.UserRole,数据)

有趣的是,非常相似的方法在 PyQt4 中也有效(我实际上是将以前编写的 PyQt4 代码移植到 PyQt5)。

from PyQt5 import QtCore, QtGui, QtWidgets

table = QtWidgets.QTableWidget()
items = ['Item_01','Item_02','Item_03']
column_names = ['Column_01','Column_02','Column_03']

for row, header in enumerate(items):
    for col, column_name in enumerate(column_names):    
        item = QtWidgets.QTableWidgetItem(column_name)
        table.setItem(row, col, item)
        item.setData(QtCore.Qt.UserRole, column_name)  

最佳答案

我也遇到了同样的问题,@ekhumoro kindly helped me out

我使用了模型/ View 方法,并且 QTableWidget 继承了 QTableView,因此它也应该适合您。

column0 = QtGui.QStandardItem()
column0.setData('Some Label',QtCore.Qt.DisplayRole)
column0.setEditable(False)

x = 123.456

column1 = QtGui.QStandardItem()
column1.setData(x,QtCore.Qt.DisplayRole)

data = [column0, column1]

row = 0 #Specify a row.

for index, element in enumerate(data):
    model.setItem(row,index,element)
    # Or in this case you might write: treeWidget.setItem(...)

可以使用 can be found here 的角色列表。

编辑我想我错过了您指定userRole的地方,在这种情况下只需指定:

QtCore.Qt.UserRole+desired_role_number

关于python - 如何在 PyQt5 的 QTableWidgetItem 中使用 UserRole 设置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42213723/

相关文章:

python - 如果默认列中的行为 NaN,如何从数据框中的其他列中选择行?

python - 使用 functools.lru_cache 时最大递归深度更快达到

c++ - 覆盖对话框关闭时的 QWidget 事件?

c++ - QTextStream 操作

python - Qt : Dead lock detected - Sender is QPushButton(), 接收器是 PyQtSlotProxy() - 用于 QPushButton 列表中的特定索引

python - Python 3中带有re.sub的lambda函数

python - 在 Pandas 列中拆分字典/列表并转换为新数据框

qt - OpenGL着色器语言;如何为vec4指定精度?

python-3.x - 隐藏/显示列时调整 Matplotlib 中的轴大小

python - QTextBrowser点击文本改变字体