PyQt6 TableView не отображает числа float32 ⇐ Python

Программы на Python
Anonymous
PyQt6 TableView не отображает числа float32

Сообщение Anonymous »

Я заполняю свой TableView с помощью DataFrame pandas. Мой DataFrame имеет 6 столбцов, 5 столбцов имеют тип String, а 6-й столбец имеет тип float32. Проблема в том, что TableView не отображает значения шестого столбца (float32), поэтому по сути он пуст. Однако данные есть, потому что когда я отлаживаю и нажимаю заголовок столбца для сортировки столбца, я вижу, что данные есть (просто не отображаются).
Мне нужно, чтобы мой шестой столбец оставался float32, поэтому Я могу отсортировать его по цифрам, в отличие от других столбцов, которые сортируются по буквам и цифрам, и я хочу, чтобы значения этого столбца также отображались правильно. Вот код, который у меня есть:
main.py:
from MainWindow import Ui_MainWindow

class TableModel(QtCore.QAbstractTableModel):

def __init__(self, data):
super(TableModel, self).__init__()
self._data = data

def data(self, index, role):
if role == Qt.ItemDataRole.DisplayRole:
value = self._data.iloc[index.row(), index.column()]
return value #here returning values as they are so 5 columns strings 6th one float

def rowCount(self, index):
return self._data.shape[0]

def columnCount(self, index):
return self._data.shape[1]

def headerData(self, section, orientation, role):
# section is the index of the column/row.
if role == Qt.ItemDataRole.DisplayRole:
if orientation == Qt.Orientation.Horizontal:
return str(self._data.columns[section])

if orientation == Qt.Orientation.Vertical:
return str(self._data.index[section])

app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
#setting up my model df is pandas DataFrame
model = TableModel(df)
#create sorter model
sortermodel = QSortFilterProxyModel()
sortermodel.setSourceModel(model)
ui.tableView.setSortingEnabled(True)
#passing model to tableview (will not work if I remove tableview element from UI designer)
ui.tableView.setModel(sortermodel)
MainWindow.show()
app.exec()

MainWindow.py:
from PyQt6 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tableView = QtWidgets.QTableView(parent=self.centralwidget)
self.tableView.setGeometry(QtCore.QRect(-5, 1, 671, 511))
self.tableView.setObjectName("tableView")
self.downloadTodaysData = QtWidgets.QPushButton(parent=self.centralwidget)
self.downloadTodaysData.setGeometry(QtCore.QRect(670, 20, 75, 24))
self.downloadTodaysData.setObjectName("downloadTodaysData")
self.LoadData = QtWidgets.QPushButton(parent=self.centralwidget)
self.LoadData.setGeometry(QtCore.QRect(670, 50, 75, 24))
self.LoadData.setObjectName("LoadData")
self.pushButton = QtWidgets.QPushButton(parent=self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(670, 80, 75, 24))
self.pushButton.setObjectName("pushButton")
self.LastDataLabel = QtWidgets.QLabel(parent=self.centralwidget)
self.LastDataLabel.setGeometry(QtCore.QRect(670, 0, 121, 20))
self.LastDataLabel.setObjectName("LastDataLabel")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.tableView.setToolTip(_translate("MainWindow", "
"))
self.downloadTodaysData.setText(_translate("MainWindow", "Get Data"))
self.LoadData.setText(_translate("MainWindow", "Load Data"))
self.pushButton.setText(_translate("MainWindow", "ChartingDatatodo"))
self.LastDataLabel.setText(_translate("MainWindow", "Last Data:"))


Подробнее здесь: https://stackoverflow.com/questions/790 ... 32-numbers

Вернуться в «Python»