QTableWidget:将单元格的活动突出显示删除或扩展到整行

时间:2019-10-11 11:33:53

标签: python python-3.x pyqt pyqt5 qtablewidget

我目前正在使用Python 3.6 / 3.7上的PyQT 5.13.1开发一个跨平台应用程序(当前正在Ubuntu 18.10和Windows 10下开发)。我正在使用以这种方式初始化的QTableWidget:

myTable = QTableWidget()
myTable.setSelectionBehavior(QAbstractItemView.SelectRows)
myTable.setSelectionMode(QAbstractItemView.SingleSelection)
myTable.setAlternatingRowColors(True)

在应用程序启动时,我的表有两列,但为空(无行),并且有一个按钮用于逐行添加行。第一次执行此操作时,将添加第一行,它的第一个单元格带有浅蓝色突出显示(在Ubuntu和Windows中),而第二个单元格则没有它,如以下屏幕截图所示:

enter image description here

如果我单击其中任何一个单元格,则会选中整行并显示蓝色背景,并进行setSelectionBehavior初始化。如果我按住CTRL键并单击该行,则会取消选择该行,并返回第一个单元格处于活动状态/突出显示,而第二个单元格则未处于活动状态。我的问题是:是否有一种方法可以完全删除该突出显示(我希望使用该突出显示)或将其也扩展到相邻的单元格?我已经读过一种可能的解决方案,那就是禁用表的焦点,但我希望避免这种解决方案。

谢谢大家!

1 个答案:

答案 0 :(得分:1)

即使没有选择索引,currentIndex也会存在,并且默认情况下将其突出显示。因此,要消除此行为,您可以使用委托来消除该行为:

class Delegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super().initStyleOption(option, index)
        option.state &= ~QtWidgets.QStyle.State_HasFocus
delegate = Delegate(myTable)
myTable.setItemDelegate(delegate)