首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PySide6 GUI 编程(41):QTableView 与 QTreeView

PySide6 GUI 编程(41):QTableView 与 QTreeView

原创
作者头像
密码学人CipherHUB
发布2024-09-01 21:50:30
发布2024-09-01 21:50:30
87320
代码可运行
举报
文章被收录于专栏:编码视界编码视界
运行总次数:0
代码可运行

QTableView

示例代码

代码语言:python
代码运行次数:0
运行
复制
from __future__ import annotations

import sys

from PySide6.QtGui import QStandardItem, QStandardItemModel
from PySide6.QtWidgets import QApplication, QMainWindow, QTableView, QVBoxLayout, QWidget


class TableModel(QStandardItemModel):
    def __init__(self, rows: int, columns: int) -> None:
        super().__init__(rows, columns)
        self._headers = [f"Header {i + 1}" for i in range(columns)]
        self.setHorizontalHeaderLabels(self._headers)

    def add_item(self, row: int, col: int, text: str) -> None:
        item = QStandardItem(text)
        self.setItem(row, col, item)


class TableView(QTableView):
    def __init__(self, model: TableModel) -> None:
        super().__init__()
        self.setModel(model)


class MainWindow(QMainWindow):
    def __init__(self) -> None:
        super().__init__()
        self.setWindowTitle("QTableView MVC Example")

        self.model = TableModel(2, 2)
        self.model.add_item(0, 0, "Item 1-1")
        self.model.add_item(0, 1, "Item 1-2")
        self.model.add_item(1, 0, "Item 2-1")
        self.model.add_item(1, 1, "Item 2-2")

        self.view = TableView(self.model)

        self.container = QWidget()
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.view)
        self.container.setLayout(self.layout)
        self.setCentralWidget(self.container)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

运行效果

table view 效果
table view 效果

QTreeView

示例代码

代码语言:python
代码运行次数:0
运行
复制
from __future__ import annotations

import sys

from PySide6.QtGui import QStandardItem, QStandardItemModel
from PySide6.QtWidgets import QApplication, QMainWindow, QTreeView, QVBoxLayout, QWidget


def add_item(parent: QStandardItem, text: str) -> None:
    item = QStandardItem(text)
    parent.appendRow(item)


class TreeModel(QStandardItemModel):
    def __init__(self):
        super().__init__()
        self.setHorizontalHeaderLabels(['Item'])


class TreeView(QTreeView):
    def __init__(self, model: TreeModel) -> None:
        super().__init__()
        self.setModel(model)


class MainWindow(QMainWindow):
    def __init__(self) -> None:
        super().__init__()
        self.setWindowTitle("QTreeView MVC Example")

        self.model = TreeModel()

        root_item = self.model.invisibleRootItem()
        item1 = QStandardItem('Item 1')
        item2 = QStandardItem('Item 2')
        root_item.appendRow(item1)
        root_item.appendRow(item2)

        add_item(item1, 'Item 1-1')
        add_item(item1, 'Item 1-2')
        add_item(item2, 'Item 2-1')
        add_item(item2, 'Item 2-2')

        self.view = TreeView(self.model)

        self.container = QWidget()
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.view)
        self.container.setLayout(self.layout)
        self.setCentralWidget(self.container)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

运行效果

tree view 效果
tree view 效果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • QTableView
    • 示例代码
    • 运行效果
  • QTreeView
    • 示例代码
    • 运行效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档