这是今天发现的一个小bug,既然解决了就分享一下。
使用的Qt版本:PySide2(PyQt5.15)
因为QScrollArea非常好用,所以通常我们会把QTableWidget放在QScrollArea的视窗当中;但是在主窗体从QScrollArea中获取滚动到的位置时,比如:
self.scroll_pos = (self.scrollArea1.horizontalScrollBar().value(), self.scrollArea1.verticalScrollBar().value())
# 获取滚动到的位置
这个时候如果我们在窗体中滚动QScrollArea的滚动条,就会发现返回出来的值不是我们所期望的:
(0, 0)
(0, 0)
(0, 0)
...
这个时候我们只要这样改动代码,从QTableWidget处获取就可以了。
self.scroll_pos = (self.my_table.horizontalScrollBar().value(), self.my_table.verticalScrollBar().value())
# 改成使用my_table这一QTableWidget对象的方法
# 获取滚动的位置
关于这个问题的本质,个人猜测是因为QTableWidget使用的滚动条是在滚动TableWidget本身的显示视窗,而这个视窗的大小不变,所以scrollArea的滚动条没有出现,也更不会对应属于QTableWidget的滚动条了。
如果有帮到你,就点个赞再走吧。