【问题标题】:How to get an current object (or data) when clicked a tree item单击树项时如何获取当前对象(或数据)
【发布时间】:2020-04-08 15:15:19
【问题描述】:

我使用 QTreeView,当我单击 TreeView 中的项目时,我想返回一个项目对象(或数据)而不是项目文本

例如,TreeView 有一个名为“香蕉”的项目

|-Parent
| |-Banana
| |-Apple

当我点击项目“香蕉”时

我已经弄清楚如何获取项目“文本”

我的代码:

import sys

from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QTreeView
from PyQt5.QtCore import QModelIndex
from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtGui import QStandardItem
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import Qt

class Model(QStandardItemModel):

    def __init__(self, inputData):
        QStandardItemModel.__init__(self)

        # inputData
        # [ {"type": "Fruit", "objects": ["Apple", "Banana"]} ]
        d = inputData[0]  # Fruit
        item = QStandardItem(d["type"])
        child = QStandardItem(d["objects"][0])  # Apple
        item.appendRow(child)
        child = QStandardItem(d["objects"][1])  # Banana
        item.appendRow(child)
        self.setItem(0, 0, item)

class Form(QWidget):
    def __init__(self):
        QWidget.__init__(self, flags=Qt.Widget)
        self.setWindowTitle("ItemView QTreeView")
        self.setFixedWidth(210)
        self.setFixedHeight(150)

        # Data
        data = [
            {"type": "Fruit", "objects": ["Apple", "Banana"]}
        ]
        # QTreeView
        self.treeView = QTreeView(self)
        self.treeView.doubleClicked.connect(self.test)

        # Model
        self.model = Model(data)
        self.treeView.setModel(self.model)

    def test(self, selectedItem:QModelIndex):
        text = self.model.data(selectedItem)
        print(text)
        ### I want to make & get "Banana" Object (or data), not a text ###

if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    exit(app.exec_())

但我想获取数据或对象

ex) 点击'Banana' -> return (Banana, color:Yellow, price:300)

难道没有办法获取物品的信息或对象吗?

【问题讨论】:

  • 您可以使用model.setData 在您的模型中保存自定义信息。您可以重载model.data() 方法以返回一个使用自定义数据构造的对象。
  • 您希望我返回 (Banana, color: Yellow, price: 300) 但您在哪里设置了这些值?

标签: python pyqt pyqt5 qtreeview


【解决方案1】:

谢谢!蒂姆·科尔纳。

我解决了。

...
item.setData(myObject)
...

    self.treeView = QTreeView(self)
    self.treeView.doubleClicked.connect(self.test)

    # Model
    self.model = Model(data)
    self.treeView.setModel(self.model)

def test(self, sel:QModelIndex):
    parentItem = self.treeView.item(
               sel.parent().row(), sel.parent.column())
    item = parentItem.child(sel.row(), sel.column)
    print(item.data()) # myObject

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2016-06-26
    • 2018-12-23
    • 2017-04-23
    • 2019-01-18
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多