You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QTableWidget失去焦点时如何取消单元格选中效果

问题

使用PyQt5开发含QTableWidget的GUI应用时,焦点从QTableWidget移动到界面内其他控件后,此前选中的单元格会显示灰色选中样式,需要去除该效果。
GUI界面效果示例

解决方法

根据是否需要保留选中记录,可选择以下两种实现方式:

方法1:QSS样式表修改失焦态样式(推荐)

该方法仅修改失焦时的视觉表现,不会清除表格内部存储的选中状态,焦点切回表格时仍可看到之前的选中项,适合需要保留用户选择记录的场景。
给QTableWidget实例设置如下样式即可:

# table为你的QTableWidget实例对象
table.setStyleSheet("""
/* 聚焦状态下的选中样式,可根据自身UI风格调整 */
QTableWidget::item:selected {
    background: #2563eb;
    color: white;
}
/* 匹配选中、但表格失焦状态下的单元格 */
QTableWidget::item:selected:!active {
    background: transparent;
    color: black;
}
""")

代码中QTableWidget::item:selected:!active是Qt样式表提供的伪状态选择器,专门匹配选中但控件未处于激活状态的项,将其背景设为透明、文字颜色设为默认文本色,即可完全消除灰色失焦选中块。

方法2:重写焦点离开事件清空选中

如果不需要保留失焦前的选中状态,希望焦点离开后直接清除所有选择,可以自定义QTableWidget子类重写focusOutEvent事件:

from PyQt5.QtWidgets import QTableWidget

class CustomTable(QTableWidget):
    def focusOutEvent(self, event):
        self.clearSelection()
        super().focusOutEvent(event)

后续在代码中用CustomTable替换原生QTableWidget即可,焦点离开表格时会自动清空所有选中项,不会再显示灰色选中样式。

内容的提问来源于stack exchange,提问作者Алексей Мельников

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:09:23