2017-02-13 159 views
0
的SetData在QTableWidgetItem

它崩潰了,當我嘗試使用QtCore.Qt.UserRolesetData存儲dataitem.setData(QtCore.Qt.UserRole, data)如何使用的UserRole在PyQt5

有趣的是,一個非常類似的方法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) 
+0

如果爲UserRole的值用「*只是隨機從頭部*生成的」'''QtCore。 Qt.UserRole + 10'''? –

+0

也因爲「Qt :: UserRole它是0x0100」,如果用整數「8」替換QtCore.Qt.UserRole,像'''item.setData(8,column_name)''' –

+0

我不能再現這個 - 除非代碼是從字面上看的,而且你沒有創建一個'QApplication'。 – ekhumoro

回答

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