【发布时间】: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