添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Qt视图以成对的方式垂直显示数据列

0 人关注

我目前正在通过PySide6在Python中使用Qt进行模型/视图编程,将我的想法包裹起来。我正在寻找一个支持显示数据行的列数据的视图 纵向 为简化起见,我在这里只假设有两列,A和B)。为了说明这一点,在一个QTableView中,数据会像这样显示(对于A和B列)。

虽然我希望它能像这样显示。

谁能给我指出一个好的起点来实现这个目标?我最初玩的是使用QDataWidgetMapper为QScrollArea中的部件显示数据,但这感觉不是正确的方法。

3 个评论
看看QTreeView,你就会在不同的分支下显示每一列。
谢谢你!"。出于某种原因,我一开始就排除了QTreeView,但现在再看,用它来做这种显示是完全合理的。
请提供足够的代码,以便其他人能够更好地理解或重现这个问题。
python
qt
model-view
pyside6
Andre Jonas
Andre Jonas
发布于 2021-10-09
1 个回答
Andre Jonas
Andre Jonas
发布于 2021-10-15
已采纳
0 人赞同

这是我根据Remarkod的建议想出来的,使用QTreeView。这在数据对之间留下了一些空间,但这对我来说很好。我想有可能以某种方式完全隐藏根项,而不是只让它们空着,无法选择。

import sys
from PySide6.QtGui import QStandardItem, QStandardItemModel, Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QTreeView
class RootItem(QStandardItem):
    def __init__(self):
        super().__init__()
        # Make root items unselectable
        self.setEditable(False)
        self.setFlags(Qt.NoItemFlags)
class ItemA(QStandardItem):
    def __init__(self):
        super().__init__()
        self.setText("A")
class ItemB(QStandardItem):
    def __init__(self):
        super().__init__()
        self.setText("B")
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.treeModel = QStandardItemModel()
        self.rootNode = self.treeModel.invisibleRootItem()
        self.treeView = QTreeView()
        self.treeView.setHeaderHidden(True)
        self.treeView.setModel(self.treeModel)
        rootItem_1 = RootItem()
        item_a1 = ItemA()
        item_b1 = ItemB()
        rootItem_2 = RootItem()
        item_a2 = ItemA()
        item_b2 = ItemB()
        rootItem_1.appendRow(item_a1)
        rootItem_1.appendRow(item_b1)
        self.rootNode.appendRow(rootItem_1)
        rootItem_2.appendRow(item_a2)
        rootItem_2.appendRow(item_b2)
        self.rootNode.appendRow(rootItem_2)
        # Expand all items, make them unexpandable, and hide decoration for root items
        self.treeView.setItemsExpandable(False)
        self.treeView.setRootIsDecorated(False)
        self.treeView.expandAll()
        self.setCentralWidget(self.treeView)
if __name__ == '__main__':