在pyqt QTreeView中选择行和列

Posted

技术标签:

【中文标题】在pyqt QTreeView中选择行和列【英文标题】:Select row and column in pyqt QTreeView 【发布时间】:2015-12-22 16:53:08 【问题描述】:

我在 qtreeview 上有一个过滤器,可以重新创建行和列。一旦过滤器被删除所有文本。即过滤器=“”。重新创建 qtreeview。我希望在根据用户过滤结果时的选择重新创建 qtreeview 时预选一行。

我知道我应该使用的方法是: tree.setCurrentIndex(m)

我知道 m 应该是: m = QtCore.QModelIndex()

但是,我似乎无法在 QModelIndex 中设置 setCurrentIndex 满意的行和列。

我通过文字知道所选项目。计划在重新创建 qtreeview 时获取行索引。

qtreeview 的设置如下:

一个 0 1 b 2 3 c 4 5

【问题讨论】:

【参考方案1】:

列的工作方式与您的预期不同。

在您的示例中,您没有任何列,只有行。

要访问项目a,您应该执行以下操作:

>>> # setting up the model
>>> tree = QtGui.QTreeView()
>>> model = QtGui.QStandardItemModel()
>>> tree.setModel(model)

>>> # accessing data
>>> # To get item "a"
>>> a = tree.model().index(0, 0)
>>> a
<PySide.QtCore.QModelIndex(0,0,0x5805c40,QStandardItemModel(0x5805b30) )   at 0x7f9a81720148>
>>>
>> # to get item "a, 0"
>>> a0 = a.child(0, 0)
>>> a0
<PySide.QtCore.QModelIndex(0,0,0x7f9a88013d30,QStandardItemModel(0x5805b30) )   at 0x7f9a81720348>

请记住,Qt 中的所有内容都遵循父/子关系,包括 QTreeView。 如果你觉得这个模型相当慢,你可以考虑提供一些方法来帮助你(不要向 Qt 寻求帮助,因为 QProxyModel 已被贬低并且不应该使用。

简而言之,项目 a 是模型在 (0, 0) 处的子项。项目 b 位于 (1, 0),依此类推。 a 的子项可以使用a.child(row, column)a 中引用。子 0 位于 (0, 0),子 1 位于 (1, 0)

【讨论】:

树没有属性索引。它确实适用于 >>> a = model.index(0,0) 抱歉,我的代码中有错字。它应该是tree.model().index,而不是tree.model.index。感谢您发现我的错误:D tree.model() 只是返回对 model 的引用,因为您在同一范围内工作,所以这里与 model.index 相同。

以上是关于在pyqt QTreeView中选择行和列的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQt5 中保持行和列大小与网格布局相同?

如何通过单击pyqt5中的按钮来制作qlineedit的动态行和列?

在 PyQt 中支持拖放的 QTreeView

如何在 VBA 中显示选择查询的行和列值

从 NumPy 数组中选择特定的行和列

选择特定行和列中的特定输入元素