行self.tableView.setSortingEnabled(True)
は、ヘッダーをクリックするとテーブルビューを並べ替えますが、間違って並べ替えます。つまり、すべての列が文字列であると考えます(たとえば、1,11,12,2,22,3
などの数値をソートします)。これを修正するにはどうすればよいですか?PyQt:QTableView列(文字列と数値)を並べ替える方法
マイコード:
self.model = QtGui.QStandardItemModel()
with open(file_name_temp, "rt") as fileInput:
i = 1
for row in csv.reader(fileInput):
item = QtGui.QStandardItem()
for field in row:
items = [
item.setData(field, QtCore.Qt.UserRole)
]
print(items)
self.model.appendRow(items)
tab_table_view = QtGui.QWidget()
self.Tab.insertTab(0, tab_table_view, self.File_Name)
self.tableView = QtGui.QTableView(tab_table_view)
self.tableView.setGeometry(QtCore.QRect(0, 0, 721, 571))
self.model = QtGui.QStandardItemModel(self)
self.tableView.setModel(self.model)
colll = self.Datas.dtypes.index
col_names = np.array(colll)
col_names = np.insert(col_names, 0, self.Datas.index.name)
self.model.setHorizontalHeaderLabels(col_names)
self.tableView.hideRow(0)
self.model.setSortRole(QtCore.Qt.UserRole)
アップデート1:すべてがコンソールに良いようだが、GUI画面上でそれがない
yyy
yyy
yyy
yyy
yyy
yyy
yyy
yyy
yyy
[<PyQt4.QtGui.QStandardItem object at 0x0000000006DF3948>, <PyQt4.QtGui.QStandardItem object at 0x0000000006DF38B8>, <PyQt4.QtGui.QStandardItem object at 0x0000000006DF3828>, <PyQt4.QtGui.QStandardItem object at 0x0000000006DF3798>, <PyQt4.QtGui.QStandardItem object at 0x0000000006DF3678>, <PyQt4.QtGui.QStandardItem object at 0x0000000006DF3EE8>, <PyQt4.QtGui.QStandardItem object at 0x0000000006DF3F78>, <PyQt4.QtGui.QStandardItem object at 0x00000000095D4048>, <PyQt4.QtGui.QStandardItem object at 0x00000000095D40D8>]
:として
if (".csv" or ".txt") in self.File_Name:
with open(file_name_temp, "rt") as fileInput:
i = 1
reader = csv.reader(fileInput)
next(reader, None)
for row in reader:
for x in range(0,Num_col+1):
try:
int(row[x])
row[x]=int(row[x])
except ValueError:
print('Not Int')
items = []
for field in row:
item = QtGui.QStandardItem(field)
if type(field)==int:
print('yyy')
data = int(field)
else:
data = field
item.setData(data, QtCore.Qt.UserRole)
items.append(item)
print(items)
self.model.appendRow(items)
は、出力を提供しますテーブルを表示しない?
私は今アイテムの宣言方法を掲載しました。今あなたは私を助けることができますか? @VenkataNarsiReddyVaddula。 – learncode
モデルには 'setSortRole'メソッドがあります。私が示した3つの異なる方法のいずれかでアイテムを作成することができます。アイテムは確かに 'setData'メソッドを持っています - あなたは何とか何か間違ったことをしているに違いありません。 – ekhumoro
はい、それはありますが、QTableViewに同時に行全体を追加しているので、データを並べ替えることができません。コードを更新しました。 @VenkataNarsiReddyVaddula。 – learncode