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

时间:2017-02-13 21:17:10

标签: python qt pyqt5

当我尝试使用dataQtCore.Qt.UserRole存储setData时崩溃:item.setData(QtCore.Qt.UserRole, data)

有趣的是,一个非常类似的方法在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)  

1 个答案:

答案 0 :(得分:1)

我有同样的问题,和@ekhumoro kindly helped me out

我使用了模型/视图方法,而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