【问题标题】:QTableWidget: remove or extend to entire row the cell's active highlightQTableWidget:删除或扩展到整行单元格的活动突出显示
【发布时间】:2020-02-08 22:23:11
【问题描述】:

我目前正在使用 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 中),第二个单元格没有它,如以下屏幕截图所示:

如果我单击其中任何一个单元格,则会选择整行并显示蓝色背景,与 setSelectionBehavior 初始化相对应。如果我 CTRL+单击该选定行,它将被取消选择并返回第一个单元格活动/突出显示,而第二个单元格没有。我的问题是:有没有办法完全删除该突出显示(我更喜欢)或将其扩展到相邻单元格?我已经阅读了一个可能的解决方案是禁用表格的焦点,但我希望避免这种解决方案。

提前谢谢大家!

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

    • 谢谢@eyllanesc,它工作得很好,就像我想要的一样。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2020-05-15
    • 2012-05-12
    • 2021-02-03
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多