打印选定树视图项的类对象

2024-06-26 13:52:55 发布

您现在位置:Python中文网/ 问答频道 /正文

如何检索所选树视图项的类对象?有没有一种方法可以将实际的类对象“Asset”实例化到每个树项上,以便以后更容易检索或编辑它

如果你看我下面的代码,当用户点击“应用”按钮时,我希望它打印树视图中所有选定的“资产”类对象,我怎么做

有人能告诉我如何将QStandardItem转译为QStandardItem并让它为我的工具工作吗

这是我的类对象

class Asset(object):
    def __init__(self, name="", nickname=""):
        self.name = name
        self.nickname = nickname
        self.age = random.randint(1, 10)
        self.number = random.randint(1, 10)
        self.size = random.uniform(0.0, 100.0)

enter image description here

from __future__ import print_function
# Modules
import sys
import random
from PySide import QtGui, QtCore

class Asset(object):
    def __init__(self, name="", nickname=""):
        self.name = name
        self.nickname = nickname
        self.age = random.randint(1, 10)
        self.number = random.randint(1, 10)
        self.size = random.uniform(0.0, 100.0)

class ToolTest(QtGui.QMainWindow):
    def __init__(self):
        super(ToolTest, self).__init__()

        # ui
        self.setWindowTitle(self.tr("Tool"))
        self.setMinimumWidth(150)
        self.setMinimumHeight(150)

        # treeview
        self.uiAssetViewer = QtGui.QTreeView()
        self.uiAssetViewer.setAlternatingRowColors(True)
        self.uiAssetViewer.setModel(createAssetsModel(self))
        self.uiAssetViewer.setSortingEnabled(True)
        self.uiAssetViewer.sortByColumn(0, QtCore.Qt.AscendingOrder)
        self.uiAssetViewer.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.uiAssetViewer.header().setResizeMode(QtGui.QHeaderView.ResizeToContents)
        self.uiAssetViewer.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.uiAssetViewer.header().setStretchLastSection(False)

        self.uiRunRenamer = QtGui.QPushButton("Apply")

        # layout: controls
        gdl = QtGui.QGridLayout()
        gdl.setContentsMargins(10, 5, 10, 5)
        gdl.addWidget(self.uiAssetViewer, 0, 0)
        gdl.addWidget(self.uiRunRenamer, 1, 0)

        # main layout
        main_widget = QtGui.QWidget()
        main_widget.setLayout(gdl)
        self.setCentralWidget(main_widget)

        # actions
        self.uiRunRenamer.clicked.connect(self.printData)

    def printData(self):
        print ("Printing Selected Data...")



def addAsset(model, asset):
    model.insertRow(0)
    model.setData(model.index(0, 0), asset.name)
    model.setData(model.index(0, 1), asset.nickname)

    model.setData(model.index(0, 1),
                  QtGui.QBrush(QtGui.QColor(50, 80, 190, 255)),
                  QtCore.Qt.ForegroundRole)

def createAssetsModel(parent):
    columns = ["Name","New Name"]

    model = QtGui.QStandardItemModel(parent)
    model.setHorizontalHeaderLabels(columns)

    addAsset(model, Asset("Josh", "J-Dog"))
    addAsset(model, Asset("Kevin", "Kev"))
    addAsset(model, Asset("Michael", "Mike"))
    addAsset(model, Asset("Curt", "Urbanis"))
    addAsset(model, Asset("Michelle", "El"))

    return model


# Main
# -----------------------------------------------------------------------------
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = ToolTest()
    window.show()
    app.exec_()

Tags: 对象nameselfmodelinitmaindefnickname