Python 加速PyQt def?

Python 加速PyQt def?,python,pyqt5,Python,Pyqt5,我的PyQt应用程序运行缓慢。我该如何加速此def: def paint(self): for i in range(self.tableWidget.columnCount()): c = [] for j in range(self.tableWidget.rowCount()): c.append(self.tableWidget.item(j, i).text()) if "X" not

我的PyQt应用程序运行缓慢。我该如何加速此def:

def paint(self):
    for i in range(self.tableWidget.columnCount()):
        c = []
        for j in range(self.tableWidget.rowCount()):
            c.append(self.tableWidget.item(j, i).text())

        if "X" not in c:
            for j in range(self.tableWidget.rowCount()):
                self.tableWidget.item(j, i).setBackground(
                    QtGui.QColor(125, 125, 125))
        else:
            for j in range(self.tableWidget.rowCount()):
                self.tableWidget.item(j, i).setBackground(
                    QtGui.QColor(255, 255, 251))

一种可能的解决方案是通过委托实现该逻辑:

类委托(QtWidgets.QStyledItemDelegate):
def initStyleOption(self、option、index):
super().initStyleOption(选项,索引)
column=index.column()
model=index.model()
发现=错误
对于范围内的行(model.columnCount()):
如果model.index(行、列).data()=“X”:
找到=真
打破
option.backgroundBrush=(
QtGui.QColor(255,255,251)如果找到其他QtGui.QColor(125,125,125)
)

一种可能的解决方案是通过委托实现该逻辑:

类委托(QtWidgets.QStyledItemDelegate):
def initStyleOption(self、option、index):
super().initStyleOption(选项,索引)
column=index.column()
model=index.model()
发现=错误
对于范围内的行(model.columnCount()):
如果model.index(行、列).data()=“X”:
找到=真
打破
option.backgroundBrush=(
QtGui.QColor(255,255,251)如果找到其他QtGui.QColor(125,125,125)
)

为什么要对行进行两次迭代?@KlausD第一次迭代是查找匹配项,第二次迭代是设置颜色,这似乎对所有项目都是通用的。它当然不是最优的,因为一个中断会更好,或者至少将项目存储在一个列表中,而不是两次获取它们。@endyaris这看起来不像一个绘画函数,它调用什么以及多久调用一次?为什么要在行上迭代两次?@KlausD第一次迭代是找到匹配项,第二次是设置颜色,这似乎是所有项目的共同点。它当然不是最优的,因为一次中断会更好,或者至少将项目存储在一个列表中,而不是两次获取它们。@endyaris这看起来不像一个绘画函数,什么叫它,多久一次?这就像一个符咒,但我不理解它。请给我一个消息来源。这就像一个符咒,但我不明白。请给我一个消息来源。
delegate = Delegate(self.tableWidget)
self.tableWidget.setItemDelegate(delegate)