根据数据帧结果条件设置QtTableWidget单元格的背景颜色

时间:2017-11-30 23:31:02

标签: python pandas pyqt5

我试图在PyQt5 UI中满足特定条件后更改单元格的背景颜色,该UI将在pandas数据帧中显示SQL结果。我的假设是在获取数据帧结果并将它们粘贴到窗口中而不是通过dataframe.style.apply函数的过程中需要在QtTableWidget中设置条件。这是我目前的代码。 UI加载成功,但是一旦我尝试加载结果,它就会崩溃(如果我没有加入此代码,就不会发生这种情况,而且我已经了解到这意味着部分代码无效)。

我附上了一张UI照片,上面显示了结果。主要目标是突出“Y' "生产中"绿色,红色,如果' N'也可以应用于其他列。

def print_output(self):
    file1 = self.result_query()
    file1 = file1[['in production',
                   'rows (prod)',
                   'expected row count',
                   'row check',
                   'export name',
                   'export group',
                   'export id',
                   'export status',
                   'prod export timestamp',
                   'holiday check',
                   'in test',
                   'rows (test)',
                   'test export timestamp',
                   'fixing flag',
                   'export type',
                   'filepath',
                   'synced to production']]
    self.ExportStatusWindow.setColumnCount(len(file1.columns))
    self.ExportStatusWindow.setRowCount(len(file1.index))
    self.ExportStatusWindow.setHorizontalHeaderLabels(file1.columns.str.title())
       for i in range(len(file1.index)):
            for j in range(len(file1.columns)):
                 #where it's posting dataframe results to view
                 self.ExportStatusWindow.setItem(i, j, QtWidgets.QTableWidgetItem(str(file1.iat[i, j])))
                 #where i'm attempting to change cell color with condition
                 if self.ExportStatusWindow.HorizontalHeaderLabels(file1.columns.str.title('in production')) == 'Y':
                   self.ExportStatusWindow(rowIndex, j).setBackground(QtGui.QColor(green))
                 else:
                   self.ExportStatusWindow(rowIndex, j).setBackground(QtGui.QColor(red))
    self.ExportStatusWindow.horizontalHeader().setStretchLastSection(False)
    self.ExportStatusWindow.resizeColumnsToContents()
    self.ExportStatusWindow.resizeRowsToContents()
    self.ExportStatusWindow.horizontalHeader().setStretchLastSection(True)

使用结果工作UI的示例

Example of working UI with results

1 个答案:

答案 0 :(得分:0)

找到我的答案:

for i in range(len(file1.index)):
    for j in range(len(file1.columns)):
        self.ExportStatusWindow.setItem(i, j, QtWidgets.QTableWidgetItem(str(file1.iat[i, j])))
        if (self.ExportStatusWindow.item(i, j).column() == 0 and
            self.ExportStatusWindow.item(i, j).text() == 'Y'):
            self.ExportStatusWindow.item(i, j).setBackground(QtGui.QColor("green"))
        elif (self.ExportStatusWindow.item(i, j).column() == 0 and
              self.ExportStatusWindow.item(i, j).text() == 'N'):
              self.ExportStatusWindow.item(i, j).setBackground(QtGui.QColor("red"))

我的问题是我没有查看我使用数据框创建的项目,我只是在查看QTableWidget本身。