如何重新排列表格视图的列顺序

时间:2015-01-21 18:24:58

标签: python qt pyqt qtableview

下面的代码创建了一个由Model / Proxy框架驱动的单个QTableView。

self.headerNames中声明的source-model list-variable存储了Header列的名称。相同source model的{​​{1}}方法使用此列表中的名称数来返回视图中的列数:

columnCount()

def columnCount(self, parent=QModelIndex()): return len(self.headerNames) 模型Proxy通过headerData()访问此self.headerNames变量:

source model

sourceModel=self.sourceModel() 上,代理检索并将列的名称返回给QTableView:

if role==Qt.DisplayRole

在标题栏右键单击上实施了右键单击菜单。 那部分工作正常。但由于我找不到其他人如何做的例子,我不得不设计自己如何运作。如果你发现它可以改进,我将不胜感激。

接下来要实现的是能够以任意顺序重新排列列。但我不知道从哪里开始。

enter image description here

P.S。请忽略QTableView中显示的项目名称。 我希望尽可能简化代码,只关注Header / Column主题。

return QVariant( sourceModel.headerNames[column] )

2 个答案:

答案 0 :(得分:5)

如果你真的想自己重新安排专栏:

您可以通过horizontalHeader的{​​{3}}和moveSection方法移动或交换部分。

headerView.moveSection(x, y)

之后会移动列x以使其成为y列,而

headerView.swapSections(x,y)

将 - 显然 - 交换两列的位置。

答案 1 :(得分:0)

感谢您在标题列右键单击示例中实现的右键单击菜单。正确地寻找与您相同的功能。重新勾选勾号后,该栏只应显示一件事,即您的app.run(port=5555) 应写为:

resHeaderMenuTriggered()