Pyside6 Qtableview выделяет строки при определенном условии ⇐ Python
Pyside6 Qtableview выделяет строки при определенном условии
Проблема: у меня есть фрейм данных, который я показываю в Qtableview, но ему необходимо выделить строки, в которых выполняется определенное условие.
Желаемый результат: Выделите строки (т. е. измените цвет фона строки), где:
[*]Сотрудники сняли больше положенной зарплаты (красный цвет). [*]Сотрудники сняли зарплату меньше положенной суммы (зеленый цвет).
Я пытался найти этот конкретный сценарий, но не смог найти правильный код для достижения моего результата. Любая помощь будет очень признательна.
из PySide6.QtCore import * # тип: игнорировать из PySide6.QtGui import * # тип: игнорировать из PySide6.QtWidgets import * # тип: игнорировать из импорта PySide6.QtSql * импортировать панд как pd импортировать систему класс PandasModel(QAbstractTableModel): """Модель для взаимодействия представления Qt с фреймом данных pandas """ def __init__ (self, dataframe: pd.DataFrame, родитель = None): QAbstractTableModel.__init__(собственный, родительский) self._dataframe = кадр данных def rowCount(self, родительский=QModelIndex()) -> int: """ Метод переопределения из QAbstractTableModel Возвращает количество строк DataFrame pandas """ если родитель == QModelIndex(): вернуть len(self._dataframe) вернуть 0 def columnsCount(self, родительский=QModelIndex()) -> int: """Переопределить метод из QAbstractTableModel Возвращает количество столбцов панд DataFrame """ если родитель == QModelIndex(): вернуть len(self._dataframe.columns) вернуть 0 def data(self, index: QModelIndex, role=Qt.ItemDataRole): """Переопределить метод из QAbstractTableModel Возврат ячейки данных из DataFrame pandas """ если не index.isValid(): возврат Нет если роль == Qt.DisplayRole: return str(self._dataframe.iloc[index.row(), index.column()]) возврат Нет Защиту заголовкаData( self, раздел: int, ориентация: Qt.Orientation, роль: Qt.ItemDataRole ): """Переопределить метод из QAbstractTableModel Возвращает индекс фрейма данных в виде данных вертикального заголовка, а столбцы — в виде данных горизонтального заголовка. """ если роль == Qt.DisplayRole: если ориентация == Qt.Horizontal: return str(self._dataframe.columns[раздел]) если ориентация == Qt.Vertical: вернуть str(self._dataframe.index[раздел]) возврат Нет класс Ui_MainWindow (объект): защита setupUi(self, MainWindow): если не MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") MainWindow.resize(1029, 738) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") self.tableView = QTableView(self.centralwidget) self.tableView.setObjectName(u"tableView") self.tableView.setGeometry(QRect(30, 50, 971, 641)) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) # настройкаUi def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) # ретранслироватьUi класс MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, *args, obj=None, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setupUi(сам) данные = [("Рамеш",25000,25000), («Сахид»,30000,25000), («Антоний», 15000,15000), («Сид»,28000,30000), («Тина», 23000,23000) ] df = pd.DataFrame(data,columns=["NAME","SALARY_DUE","SALARY_WITHDRAWN"]) #print(df.head()) self.tableView.setAlternatingRowColors(True) self.tableView.setSelectionBehavior(QTableView.SelectRows) self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) модель = PandasModel(df) self.tableView.setModel(модель) если __name__ == "__main__": приложение = QApplication(sys.argv) ш = ГлавноеОкно() w.show() приложение.exec()
Проблема: у меня есть фрейм данных, который я показываю в Qtableview, но ему необходимо выделить строки, в которых выполняется определенное условие.
Желаемый результат: Выделите строки (т. е. измените цвет фона строки), где:
[*]Сотрудники сняли больше положенной зарплаты (красный цвет). [*]Сотрудники сняли зарплату меньше положенной суммы (зеленый цвет).
Я пытался найти этот конкретный сценарий, но не смог найти правильный код для достижения моего результата. Любая помощь будет очень признательна.
из PySide6.QtCore import * # тип: игнорировать из PySide6.QtGui import * # тип: игнорировать из PySide6.QtWidgets import * # тип: игнорировать из импорта PySide6.QtSql * импортировать панд как pd импортировать систему класс PandasModel(QAbstractTableModel): """Модель для взаимодействия представления Qt с фреймом данных pandas """ def __init__ (self, dataframe: pd.DataFrame, родитель = None): QAbstractTableModel.__init__(собственный, родительский) self._dataframe = кадр данных def rowCount(self, родительский=QModelIndex()) -> int: """ Метод переопределения из QAbstractTableModel Возвращает количество строк DataFrame pandas """ если родитель == QModelIndex(): вернуть len(self._dataframe) вернуть 0 def columnsCount(self, родительский=QModelIndex()) -> int: """Переопределить метод из QAbstractTableModel Возвращает количество столбцов панд DataFrame """ если родитель == QModelIndex(): вернуть len(self._dataframe.columns) вернуть 0 def data(self, index: QModelIndex, role=Qt.ItemDataRole): """Переопределить метод из QAbstractTableModel Возврат ячейки данных из DataFrame pandas """ если не index.isValid(): возврат Нет если роль == Qt.DisplayRole: return str(self._dataframe.iloc[index.row(), index.column()]) возврат Нет Защиту заголовкаData( self, раздел: int, ориентация: Qt.Orientation, роль: Qt.ItemDataRole ): """Переопределить метод из QAbstractTableModel Возвращает индекс фрейма данных в виде данных вертикального заголовка, а столбцы — в виде данных горизонтального заголовка. """ если роль == Qt.DisplayRole: если ориентация == Qt.Horizontal: return str(self._dataframe.columns[раздел]) если ориентация == Qt.Vertical: вернуть str(self._dataframe.index[раздел]) возврат Нет класс Ui_MainWindow (объект): защита setupUi(self, MainWindow): если не MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") MainWindow.resize(1029, 738) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") self.tableView = QTableView(self.centralwidget) self.tableView.setObjectName(u"tableView") self.tableView.setGeometry(QRect(30, 50, 971, 641)) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) # настройкаUi def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) # ретранслироватьUi класс MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, *args, obj=None, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setupUi(сам) данные = [("Рамеш",25000,25000), («Сахид»,30000,25000), («Антоний», 15000,15000), («Сид»,28000,30000), («Тина», 23000,23000) ] df = pd.DataFrame(data,columns=["NAME","SALARY_DUE","SALARY_WITHDRAWN"]) #print(df.head()) self.tableView.setAlternatingRowColors(True) self.tableView.setSelectionBehavior(QTableView.SelectRows) self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) модель = PandasModel(df) self.tableView.setModel(модель) если __name__ == "__main__": приложение = QApplication(sys.argv) ш = ГлавноеОкно() w.show() приложение.exec()
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Python Pyside6 QtableView Модель данных отображает данные в формате локали
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Python Pyside6 QtableView Модель данных отображает данные в формате локали
Anonymous » » в форуме Python - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Python Pyside6 QtableView Модель данных отображает данные в формате локали
Anonymous » » в форуме Python - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-