2017-02-13 9 views
0
にQTableWidgetItemでのUserRoleを使用してsetDataをする方法

それはクラッシュPyQt5へ)。は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

'QtCore:

EDITは、私はあなたが、その場合にだけ指定userRoleを指定された点を逃したと思います。 Qt.UserRole + 10'''? –

+0

また、 "Qt :: UserRole it's 0x0100"なので、QtCore.Qt.UserRoleを整数 "8"で置き換えるとどうでしょうか?item.setData(8、column_name) '' 'のように –

+0

私はこれを再現できません。コードは文字通り取られ、あなたは 'QApplication'を作成できませんでした。 – ekhumoro

答えて

1

私は同じ問題を抱えていました。そして、@エフモロkindly helped me outです。

私はモデル/ビューアプローチを使用しました。QTableWidgetQTableViewを継承していますので、あなたも同様に機能するはずです。

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