iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0

今天終於可以回去 https://doc.qt.io/qtforpython/PySide6/QtWidgets/index.html#list-of-classes 往下看其他元件了, QAbstractButton 之後是 QAbstractItemView
點進去看裡面, QAbstractItemView 下有 QTreeView, QTreeWidget, QHelpContentWidget, QTableView, QTableWidget, QListView, QUndoView, QListWidget, QHelpIndexWidget, QHeaderView 和 QColumnView

今天看來QTreeView

QTreeWidget 和 QTableWidget 有使用過了, 但是 View? Widget 跟 View 有甚麼不同嗎? 直接從名字為
"set" 開頭的成員函式來看的話, QTreeView 好像比 QTreeWidget 更多功能, 總之我們先來直接使用吧

看了一遍官網上所有內建函示後, 因為發現沒有認識的函式名, 我決定回去參考我之前寫的 QTreeWidget, 看看能不能把在 QTreeWidget 用過的拿來使用

我錯了, 官網上有說 QTreeView 是 Model/View Classes, 所以要加資料要用 setModel()

所以 QTreeWidget 跟 QTreeView 其實是不同的東西, model 相關資訊從 https://doc.qt.io/qtforpython/overviews/model-view-programming.html#models 查詢
我們這次加資料用 QStandardItemModel
所以我們要先看 QStandardItemModel 裡有哪些函式再回來看 QTreeView

總之先寫個視窗

import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import *

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        treeV = QTreeView(self)
        treeV.resize(450, 250)
        model = QStandardItemModel(3, 3)
        treeV.setModel(model)

if __name__ == "__main__":
    app = QApplication([])

    widget = MyWidget()
    widget.resize(500, 300)
    widget.show()

    sys.exit(app.exec())

https://ithelp.ithome.com.tw/upload/images/20220927/201511445mzjbosiW3.png

接下來是把資料放進去

import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import *

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        treeV = QTreeView(self)
        treeV.resize(450, 250)
        model = QStandardItemModel(3, 3)
        for row in range(0, model.rowCount()):
            for column in range(0, model.columnCount()):
                item = QStandardItem("row: "+str(row)+" column: "+str(column))
                model.setItem(row, column, item)
        treeV.setModel(model)

if __name__ == "__main__":
    app = QApplication([])

    widget = MyWidget()
    widget.resize(500, 300)
    widget.show()

    sys.exit(app.exec())

https://ithelp.ithome.com.tw/upload/images/20220927/201511445vqrkFDOin.png

看起來沒有 Tree 的感覺, 資料形式換個方式塞進 Tree 裡

import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import *

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        treeV = QTreeView(self)
        treeV.resize(450, 250)
        model = QStandardItemModel(3,2)
        for row in range(0, model.rowCount()):
            item = QStandardItem("row: "+str(row))
            for column in range(0, model.columnCount()):
                item2 = QStandardItem("column: "+str(column))
                item.appendRow(item2)
            model.appendRow(item)
        treeV.setModel(model)

if __name__ == "__main__":
    app = QApplication([])

    widget = MyWidget()
    widget.resize(500, 300)
    widget.show()

    sys.exit(app.exec())

...
https://ithelp.ithome.com.tw/upload/images/20220927/201511443R67rsF0qb.png

不知道為甚麼上方有三行空白... 亂寫的下場...

另外我發現一件有趣的事, 雙擊可以編輯耶!
https://ithelp.ithome.com.tw/upload/images/20220927/20151144M4XaEmDnR7.png
每一個都可以, QTreeView 可以做到的事真的比 QTreeWidget 多耶, 但是個人感覺要上手也相對較難
希望明天能做出炫砲的東西


上一篇
【Day24】QCommandLinkButton
下一篇
【Day26】QTreeView 完全新手 - 續
系列文
[Python QT] 玩玩 Pyside 的各種功能31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言