0

namedtuple オブジェクトのノードを treeView に追加しようとしていますが、QAbstractItem をサブクラス化する方法がわかりません (それが適切な方法である場合でも)。私はまだPythonに非常に慣れていないので、これは私を混乱させます。ここに私の問題コードがあります:

Exercise = namedtuple('Exercise','name html list')
e_list = []
for i in range(1,6,1):
    dummy_list = [1,2,3,'a','b','c']
    ntup = Exercise("exercise{0}".format(i),'html here',dummy_list)
    e_list.append(ntup)

for e in e_list:
    item = QtGui.QStandardItem(e) # gives error
    self.tree_model.appendRow(item) # doesnt execute

そして、ここにプログラム全体があります:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from collections import namedtuple

class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.pushButton = QtGui.QPushButton(self)
        self.pushButton.setText("Test 1 - doesn't work")
        self.pushButton.clicked.connect(self.on_pushbutton)

        self.pushButton2 = QtGui.QPushButton(self)
        self.pushButton2.setText("Test 2 - works")
        self.pushButton2.clicked.connect(self.on_pushbutton2)

        self.treeView = QtGui.QTreeView(self)
        self.treeView.clicked[QModelIndex].connect(self.on_clickitem)

        self.tree_model = QtGui.QStandardItemModel()
        self.treeView.setModel(self.tree_model)

        self.layoutVertical = QtGui.QVBoxLayout(self)
        self.layoutVertical.addWidget(self.pushButton)
        self.layoutVertical.addWidget(self.pushButton2)
        self.layoutVertical.addWidget(self.treeView)

    def on_pushbutton(self):
        Exercise = namedtuple('Exercise','name html list')
        e_list = []
        for i in range(1,3,1):
            dummy_list = [1,2,3,'a','b','c']
            ntup = Exercise("exercise{}".format(i),'html here',dummy_list)
            e_list.append(ntup)

        for e in e_list:
            item = QtGui.QStandardItem(e) # gives error
            self.tree_model.appendRow(item) # never occurs

    def on_pushbutton2(self):
        txt = 'hello world'
        item = QtGui.QStandardItem(txt)
        self.tree_model.appendRow(item)

    def on_clickitem(self,index):
        item = self.tree_model.itemFromIndex(index) # doesn't work
        print "item name:",item.getName() # doesn't work
        print "item html:",item.getHtml() # doesn't work
        print "item list:",item.getList() # doesn't work



if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.show()

    sys.exit(app.exec_())

ノードをツリーに追加したいのですが、アイテムをクリックすると、namedtuple の値 (つまり、'name'、'html'、および 'alist' の値) を取得したいと考えています。ご協力いただきありがとうございます。

ポール

4

1 に答える 1

0

QTreeWidget を使用して、次のようにツリー項目データを設定することになりました。

item = QtGui.QTreeWidgetItem()
item.mydata = my_namedtuple

私はここで答えを見つけました: QtGui QTreeWidgetItem setData は浮動小数点数を保持しています

ツリー項目の属性を動的に作成できるとは知りませんでした。

于 2013-04-11T06:21:24.123 に答える