吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 365|回复: 16
收起左侧

[讨论] 求教pyqt/pyside大佬关于表格失焦后重置当前行的问题

[复制链接]
Vulpine 发表于 2024-4-23 17:21
本帖最后由 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) 

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

似水流年2015 发表于 2024-4-23 17:34
能不能设置,当表格失去鼠标焦点时,记录下当前行到某变量,当表格有鼠标滑过时,就把某变量存的行数,设置为选中行
devilpanama 发表于 2024-4-23 17:41
定义个全局变量,每次点击tablewidget时更新,用的时候直接用
 楼主| Vulpine 发表于 2024-4-23 18:01
似水流年2015 发表于 2024-4-23 17:34
能不能设置,当表格失去鼠标焦点时,记录下当前行到某变量,当表格有鼠标滑过时,就把某变量存的行数,设置 ...

在失焦监听函数中记录的时候当前行有时候就已经被置为未选中状态了。而且这里的失焦我有些分不清,因为当选中表格中的某一行后再去点击其他控件,比如点击按钮,并不会立刻将表格当前行置为未选中状态,而且再当鼠标滑过的时候表格的当前行置就会被设置为未选中状态
 楼主| Vulpine 发表于 2024-4-23 18:04
devilpanama 发表于 2024-4-23 17:41
定义个全局变量,每次点击tablewidget时更新,用的时候直接用

我现在就是这么搞的,我觉得在qt中是不是有某个属性来控制表格这个特性的,我之前使用swing时没有这问题
chenzhigang 发表于 2024-4-23 18:29
本帖最后由 chenzhigang 于 2024-4-23 18:32 编辑
Vulpine 发表于 2024-4-23 18:01
在失焦监听函数中记录的时候当前行有时候就已经被置为未选中状态了。而且这里的失焦我有些分不清,因为当 ...

你如果点lable 呢 回失去焦点吗
Python_wencai 发表于 2024-4-23 18:43
为啥做这个项目?现在商业有需求吗
 楼主| Vulpine 发表于 2024-4-23 19:25
chenzhigang 发表于 2024-4-23 18:29
你如果点lable 呢 回失去焦点吗

试了一下不会这样,但是点击按钮也是有时候会有时候不会。很迷茫,不知道什么机制
 楼主| Vulpine 发表于 2024-4-23 19:26
Python_wencai 发表于 2024-4-23 18:43
为啥做这个项目?现在商业有需求吗

开发一款视觉软件,几个月了
MarioCrane 发表于 2024-4-24 00:17
本帖最后由 MarioCrane 于 2024-4-24 20:56 编辑

我测试了一下,用tableView和tableWidget都无法复现你遇到的问题,点击外部按钮表格会失去焦点,但当前选中行不变,表格重新获取焦点后选中行依旧不变。测试发现tableView和tableWidget有一处不同,tableView通过点击滚动条和点击空白处获取焦点不会改变当前选中行,tableWidget点击空白处则会取消当前选中行。测试环境: Windows 11,Qt 6.6.2 MSVC
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-4 18:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表