根据从Sqlite数据库加载的特定值设置Pyqt4 TableWidget背景颜色

2024-10-01 09:29:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据从Sqlite数据库加载的数据中的某个值设置TableWidget的背景色,如下面的示例所示。我在PyQt Tableview background color based on text value rather than True or False中看到了下面的答案。在

问题是,在我的设置中,我使用的TableWidget带有一个按钮(我使用Qt Designer)从Sqlite数据库加载数据,我不太确定如何在我的设置中实现以下代码,因为我不完全理解它是如何工作的:

def data(self, item, role):
    if role == Qt.BackgroundRole:
        if QSqlQueryModel.data(self, self.index(item.row(), 2), Qt.DisplayRole) == "Young":
            return QBrush(Qt.yellow)
    if role == Qt.DisplayRole:
        if item.column() == 3:
            return True if QSqlQueryModel.data(self, item, Qt.DisplayRole) == 1 else False
    return QSqlQueryModel.data(self, item, role) 

下面是我选择Sqlite数据并将其显示到TableWidget的代码。我使用的是PyQT4,pyhton2.7。在

^{pr2}$

使用的数据库是sqlite。4行4列。列标题:编号、公司、设备、状态“状态”记录包括“是”或“否”。所以无论“否”在哪里,我都希望背景是红色的

数据库中的我的表

基于特定值的表格视图颜色

enter image description here


Tags: 数据self数据库falsetruesqlitedatareturn
1条回答
网友
1楼 · 发布于 2024-10-01 09:29:49

post的解决方案示例只有在使用QTableViewQTableWidget时才有效,QTableWidget不允许建立新的模型,有几个选项可以解决这个问题。在

对于示例,我将假定数据具有以下形式:

Number      Company     Equipment   Status    
                          
1           company1    Equipment1  YES       
2           company2    Equipment2  NO        
3           company3    Equipmen3   NO        
4           company4    Equipment4  YES 
  • 使用setBackground()方法QTableWidgetItem

^{pr2}$
  • 使用委托:

class Delegate(QStyledItemDelegate):
    def paint(self, painter, option, index):
        ix = index.model().index(index.row(), 3)
        if ix.data() == "NO":
            painter.fillRect(option.rect,Qt.red)
        QStyledItemDelegate.paint(self, painter, option, index)

[...]
self.tableWidget.setItemDelegate(Delegate(self.tableWidget))

输出:

enter image description here

相关问题 更多 >