【问题标题】:Python: QTableWidget scrollToItem()Python:QTableWidget scrollToItem()
【发布时间】:2012-09-04 16:50:29
【问题描述】:

我刚刚开始使用 python,所以我遇到了问题。我到处搜索,我得出了这个结论:我使用 QT-Designer 制作了一个简单的 GUI。填写完 tableWidget 后,我​​想要的只是自动滚动到第 10 行,我是这样成功的:

for i in range(0, self.rows):
    ...filling table...
self.ui.tableWidget.scrollToItem(self.ui.tableWidget.item(10, 3), QtGui.QAbstractItemView.PositionAtCenter)
self.ui.tableWidget.scrollToItem(self.ui.tableWidget.selectRow(10), QtGui.QAbstractItemView.PositionAtCenter)

问题:如果没有第 3 行或第 4 行,这是行不通的。正如我所说,我是 Python 新手,所以好的解释或建议对我来说意义重大。

【问题讨论】:

  • 你的问题很不清楚。什么“不起作用”?你预计会发生什么?
  • @ekhumoro 在 Eric Hulser 的回答中,我的问题是:为什么我需要这一行:self.ui.tableWidget.selectRow(10) 以及为什么仅这一行不做任何事情(不滚动到第 10 行): self.ui.tableWidget.scrollToItem(self.ui.tableWidget.item(10, 3), QtGui.QAbstractItemView.PositionAtCenter)

标签: python pyqt4 qtablewidget


【解决方案1】:

所以,这一行:

self.ui.tableWidget.scrollToItem(self.ui.tableWidget.item(10, 3), QtGui.QAbstractItemView.PositionAtCenter)

会起作用,因为执行 self.ui.tableWidget.item(10, 3) 会返回一个项目

self.ui.tableWidget.scrollToItem(self.ui.tableWidget.selectRow(10), QtGui.QAbstractItemView.PositionAtCenter)

这一行不起作用 - 因为看起来您在这里尝试做的是选择界面中的行,该行返回 None (void) 值

你必须做两个调用,第一次滚动到项目,然后选择行(或任何你想要的顺序,顺序无关)

item = self.ui.tableWidget.item(10, 3)
self.ui.tableWidget.scrollToItem(item, QtGui.QAbstractItemView.PositionAtCenter)
self.ui.tableWidget.selectRow(10)

在 C++ 中会出现错误,但在 Python 中,返回 void 的方法将返回 None,这与将 NULL 指针传递给 scrollToItem 方法相同。

【讨论】:

  • 感谢您的回答。但是,是否有另一种方法可以滚动到该行?我什至不需要它被选中。
  • 如果您不需要选择它,您应该可以删除 self.ui.tableWidget.selectRow(10) 行。需要注意的一件事是,您需要确保在表格小部件可见时完成此调用,如果您在构建过程中执行此操作,则它还没有正确的坐标可以滚动到。
  • 这就是我一直在寻找的答案。谢谢你。有趣的是它在表格不可见时有效,但仅适用于self.ui.tableWidget.selectRow(10)
  • 有趣 - 该调用可能会在内部强制进行更新,从而在表格仍在加载时使滚动工作。不确定 - 一旦表格可见,我通常会执行所有基于滚动/位置的操作。
猜你喜欢
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 2018-10-18
相关资源
最近更新 更多