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

问题描述 投票:1回答:1

我目前正在使用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键并单击该行,则会取消选择该行,并返回第一个单元格处于活动状态/突出显示,而第二个单元格则未处于活动状态。我的问题是:是否有一种方法可以完全删除该突出显示(我希望使用该突出显示)或将其扩展到相邻单元格?我已经读过一种可能的解决方案,那就是禁用表的焦点,但我希望避免这种解决方案。

谢谢大家!

python python-3.x pyqt pyqt5 qtablewidget
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.