簡體   English   中英

發送信號以突出顯示QtableWidget PyQt中的單元格

[英]Sending a signal to highlight cell in QtableWidget PyQt

在我的應用程序中,我想檢查特定列中的每個單元格是否為空字段。 如果為空,我想突出顯示該單元格。 當該單元格已更改時,我要取消突出顯示它。 下面的代碼有效,但是在該功能兩次突出顯示之后,將完全停止突出顯示。 請告訴我為什么會這樣,以及如何解決此代碼。

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將突出顯示兩次后,將停止同時突出顯示所有。 其他單元格將繼續突出顯示,直到突出顯示兩次。

每次修改項目時都會調用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_())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM