QTableWidget失去焦点时如何取消单元格选中效果
问题
使用PyQt5开发含QTableWidget的GUI应用时,焦点从QTableWidget移动到界面内其他控件后,此前选中的单元格会显示灰色选中样式,需要去除该效果。
解决方法
根据是否需要保留选中记录,可选择以下两种实现方式:
方法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,提问作者Алексей Мельников
相关产品推荐
相关产品推荐

