Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于从Sqlite数据库加载的特定值设置Pyqt4 TableWidget背景颜色_Python_Python 2.7_Pyqt_Pyqt4_Qtablewidget - Fatal编程技术网

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

Python 基于从Sqlite数据库加载的特定值设置Pyqt4 TableWidget背景颜色,python,python-2.7,pyqt,pyqt4,qtablewidget,Python,Python 2.7,Pyqt,Pyqt4,Qtablewidget,我试图根据从Sqlite数据库加载的数据中的特定值设置TableWidget的背景色,如下面的示例所示。我已经看到了下面的答案 问题是,在我的设置中,我使用带有按钮的TableWidget(我使用Qt Designer)从Sqlite数据库加载数据,我不太确定如何在我的设置中实现以下代码,因为我不完全了解它是如何工作的: def data(self, item, role): if role == Qt.BackgroundRole: if QSqlQueryModel.

我试图根据从Sqlite数据库加载的数据中的特定值设置TableWidget的背景色,如下面的示例所示。我已经看到了下面的答案

问题是,在我的设置中,我使用带有按钮的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,Pyhton 2.7

self.load_btn.clicked.connect(self.loadData)

def loadData(self):

    ##DB Connection ###

    cursor = conn.cursor()

    query = "SELECT * FROM Tadata"
    cursor.execute(query)
    results = cursor.fetchall()

    self.tableWidget.setRowCount(0)
    for row_number, row_data in enumerate(results):
        self.tableWidget.insertRow(row_number)
        for column_number, data in enumerate (row_data):

            self.tableWidget.setItem(row_number,column_number,QtGui.QTableWidgetItem(str(data)))
使用的数据库是sqlite。4行4列。列标题:编号、公司、设备、状态。”“状态”记录包括“是”或“否”。所以无论“否”在哪里,我希望背景是红色的

数据库中的我的表

基于特定值的tableview颜色


只有使用
QTableView
QTableWidget
不允许建立新模型时,示例帖子的解决方案才有效,有几个选项可以解决此问题

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

Number      Company     Equipment   Status    
----------  ----------  ----------  ----------
1           company1    Equipment1  YES       
2           company2    Equipment2  NO        
3           company3    Equipmen3   NO        
4           company4    Equipment4  YES 
  • 使用
    QTableWidgetItem

  • 使用代理:

输出:


此方法仅适用于QTableView,QTableWidget无法建立新模型,对于您的情况,我需要您告诉我您的表在database@eyllanesc感谢promt回复。@eyllanesc感谢promt回复!使用的数据库是sqlite。4行4列。列标题:编号、公司、设备、状态。”“状态”记录包括“是”或“否”。因此,无论“否”在哪里,我都希望背景为红色。编辑您的问题并将其添加到其中检查我的解决方案,我建议使用选项2,它更通用。我使用了QTableWidgetItem的setBackground()方法,但没有背景色。如何或在何处使用委托方法添加代码?@user3890023委托在构造函数中建立。如果您仍然有问题,请分享我的代码,我会添加它。非常感谢。我一定是在选项1中输入了错误。我很满意你的第一个选择。非常感谢你。非常感谢!!!
self.tableWidget.setRowCount(0)
for row_number, row_data in enumerate(results):
    self.tableWidget.insertRow(row_number)
    for column_number, data in enumerate (row_data):
        self.tableWidget.setItem(row_number,column_number, QTableWidgetItem(str(data)))
        if column_number == 3 and data == "NO":
            [self.tableWidget.item(row_number, c).setBackground(Qt.red) for c in range(len(row_data))]
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))