本帖最后由 Vulpine 于 2024-4-23 17:23 编辑
问题:首先鼠标点击表格选中某一行,鼠标点击其他控件然后鼠标再次滑过表格时,可以看到表格之前选的那一行会被置为未选中状态,用tableWidget.currentRow()时会返回-1
版本:python3.7,pyside6.1.3
诉求:无论如何保持表格当前选项
下面是我自己想到的方法,但是感觉太麻烦了,求教大佬推荐更简单的方法
[Python] 纯文本查看 复制代码
思路:点击表格的监听函数中记录当前行,设置全局鼠标移动监听不断设置当前行,防止当前行丢失
# 设置QMainWindow上所有控件的事件过滤器,在事件过滤器中监听所有控件的鼠标移动
self.installEventFilterRecursively(self)
def installEventFilterRecursively(self, obj):
"""
递归为所有控件安装事件过滤器和设置鼠标监听
:param obj:
:return:
"""
# 安装事件过滤器
obj.installEventFilter(self)
# 设置鼠标监听
obj.setMouseTracking(True)
if isinstance(obj, QWidget): # QWidget是所有控件的基类
for child in obj.findChildren(QWidget):
self.installEventFilterRecursively(child)
def eventFilter(self, obj, event):
if event.type() == QEvent.MouseMove:
self.selectTableWidgetCurrentRow()
return super().eventFilter(obj, event)
#点击表格的监听函数中记录当前行
self.tableWidget.cellClicked.connect(self.saveCurrentRow)
def saveCurrentRow(self):
self.tableWidgetRow = self.tableWidget.currentRow()
def selectTableWidgetCurrentRow(self):#设置当前行
self.tableWidget.selectRow(self.tableWidgetRow)
|