Qt视图,以成对垂直显示数据列



我目前正在通过PySide6在Python中使用Qt进行模型/视图编程。我正在寻找一个视图,支持显示数据行垂直的列数据成对(为了简化,我只假设这里有2列,a和B)。为了说明这一点,在QTableView中,数据将显示如下(列a和B):

A B
A B

我想让它像这样显示:


B


B…

有人能告诉我一个好的起点来实现这一点吗?我最初尝试使用QDataWidgetMapper为QScrollArea中的小部件显示数据,但感觉这不是正确的方法。

以下是我根据remark建议使用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__':
app = QApplication(sys.argv)
main_win = MainWindow()
main_win.show()
sys.exit(app.exec())

相关内容

  • 没有找到相关文章

最新更新