python - QTableWidget:删除或扩展到整行单元格的事件突出显示

标签 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 键并单击所选行,则会取消选择该行并返回,第一个单元格处于事件/突出显示状态,而第二个单元格处于事件/突出显示状态。我的问题是:有没有办法完全删除该突出显示(我更喜欢)或将其扩展到相邻的单元格?我读过一种可能的解决方案是禁用表格的焦点,但我希望避免这样的解决方案。

先谢谢大家了!

最佳答案

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

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)

关于python - QTableWidget:删除或扩展到整行单元格的事件突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58340428/

相关文章:

Python:从集合中检索项目

python - 尝试从网页打印所有 TR 元素和所有 TD 元素

python - PyQt 代码拆分——设计与功能

python - pywin32 TOKEN_PRIVILEGES

python - 导入的 Python 模块中的导入语句如何工作?

python - 需要有选择地转义 html 实体 (&)

python - PyQT 用户可编辑多边形

python - 从子列表总和小于给定数字的列表创建子列表

python-3.x - 如何根据提供的输入从训练有素的随机森林模型中获取单个房价

python - 自己在 PyQt/PySide 中绘制错误对话框图标