【问题标题】:Sending a signal to highlight cell in QtableWidget PyQt发送信号以突出显示 QtableWidget PyQt 中的单元格
【发布时间】:2023-04-02 19:46:01
【问题描述】:

在我的应用程序中,我想检查特定列中的每个单元格是否有空字段。如果为空,我想突出显示该单元格。当该单元格已更改时,我想取消突出显示它。下面的代码有效,但在函数突出显示两次后将完全停止突出显示。请告诉我为什么会发生这种情况以及如何修复此代码。

def getAllTableValues(self):
    for index in range(self.rowCount()):
        item = self.item(index,2)
        if item.text() == "":
            item.setBackground(QtCore.Qt.red)
            self.itemChanged.connect(lambda: self.changeToWhite(item))
            return None
    allRows = self.getAllRows()

def changeToWhite(self, item):
    item.setBackground(QtCore.Qt.white)

编辑:QwidgetItem 似乎在高亮两次后将停止一起高亮。其他单元格将继续突出显示,直到突出显示两次。

【问题讨论】:

    标签: python pyqt pyqt5 qtablewidget


    【解决方案1】:

    itemChanged 每次修改项目时都会调用,尽管修改会清除单元格。更好的选择是使用根据显示的文本更改颜色的委托:

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    class HighlightDelegate(QtWidgets.QStyledItemDelegate):
        def initStyleOption(self, option, index):
            super(HighlightDelegate, self).initStyleOption(option, index)
            color = QtGui.QColor(QtCore.Qt.white if option.text else QtCore.Qt.red)
            option.backgroundBrush = QtGui.QBrush(color)
    
    
    class MainWindow(QtWidgets.QMainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
    
            table = QtWidgets.QTableWidget(10, 10)
            delegate = HighlightDelegate(table)
            table.setItemDelegateForColumn(2, delegate)
    
            self.setCentralWidget(table)
    
    
    if __name__ == '__main__':
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 2015-06-06
      • 1970-01-01
      • 2021-01-22
      • 2017-06-22
      • 2019-02-01
      • 1970-01-01
      相关资源
      最近更新 更多