QTableView点击某行后会滚动
时间: 2023-07-04 17:09:51 浏览: 218
这可能是由于QTableView的默认行为导致的。当用户单击某行时,QTableView会尝试将该行滚动到视图的中心位置,以便用户可以更好地查看该行的内容。
如果您不希望发生这种行为,您可以尝试通过以下方法禁用它:
```python
tableView.verticalScrollMode(QAbstractItemView.ScrollPerPixel)
```
这将使QTableView在滚动时以像素为单位进行滚动,而不是滚动到行的中心位置。
相关问题
QTableView点击后滚动
默认情况下,QTableView 在被单击后不会自动滚动。如果您希望在单击单元格时自动滚动,请按照以下步骤操作:
1. 创建一个子类化 QTableView 的新类。
2. 重写 mousePressEvent() 方法,并在其中获取单元格的位置信息。
3. 使用 scrollTo() 方法将视图滚动到单元格的位置。
以下是一个示例:
```python
from PyQt5.QtWidgets import QTableView, QApplication
from PyQt5.QtCore import QModelIndex, Qt
class MyTableView(QTableView):
def __init__(self, parent=None):
super(MyTableView, self).__init__(parent)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
index = self.indexAt(event.pos())
if index.isValid():
self.scrollTo(index, QTableView.PositionAtCenter)
super(MyTableView, self).mousePressEvent(event)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
table_view = MyTableView()
# ... 设置表格模型和数据 ...
table_view.show()
sys.exit(app.exec_())
```
在上面的示例中,我们创建了一个新类 MyTableView,它子类化了 QTableView。我们重写了 mousePressEvent() 方法,并在其中获取单元格的位置信息。然后,我们使用 scrollTo() 方法将视图滚动到单元格的位置。最后,我们调用父类的 mousePressEvent() 方法以确保其他事件处理程序能够正常工作。
请注意,scrollTo() 方法接受两个参数:要滚动到的索引和位置。在上面的示例中,我们使用 QTableView.PositionAtCenter 选项将单元格滚动到视图的中心位置,但您也可以选择其他位置。
QtableView怎么一行行滚动
您可以使用QAbstractItemView的scrollTo()函数实现一行一行滚动。该函数接受一个QModelIndex参数,该参数是您要滚动到的项的模型索引。您可以通过以下方式使用该函数:
```python
# 获取下一行的模型索引
next_index = self.tableview.indexAt(QPoint(0, self.tableview.rowViewportPosition(self.tableview.currentIndex().row() + 1)))
# 如果有下一行,滚动到下一行
if next_index.isValid():
self.tableview.scrollTo(next_index)
```
这将滚动到表格视图中的下一行。您可以将此代码放入一个循环中,以实现一行一行滚动。
阅读全文