1

ツリービューから文字列/オブジェクトを取得しようとしています。したがって、ユーザーがツリービューの任意のアイテムをクリックすると、ターミナルに表示できます。助けていただければ幸いです。ここにコードがあります。ツリービューで文字列/アイテムをクリックすると、次のように表示 されます。Linux ではなく0xb6b6c7d4の PyQt4.QtCore.QModelIndexオブジェクト

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtCore, QtGui

data = root = [

    ("Linux", [

        ("System",

                [("System name",[]),
         ("Kernel", []),
         ("Drivers", []),
         ("Memory", []),
         ("Processes", []),
                 ("Disk mounted", []), 
         ("Services Running", []),
         ("Installed Packages", [])]),
        #[("System name", [])]),

        ("Network",
        [("Nework confi.",[]),
        ("Interface test", [])]),

        ("PCI Devices",
        [("PCI devices", [])]),

        ("Logs", 
        [("Messages",[]),
        ("Dmesg", [])]),


        ])]

class Window(QWidget):

    def __init__(self):

        QWidget.__init__(self)

        self.treeView = QTreeView()


        self.model = QStandardItemModel()
        self.addItems(self.model, data)
        self.treeView.setModel(self.model)

        self.model.setHorizontalHeaderLabels([self.tr("Object")])

        layout = QVBoxLayout()
        layout.addWidget(self.treeView)
        self.setLayout(layout)
    self.treeView.connect(self.treeView, QtCore.SIGNAL('clicked(QModelIndex)'), self.treefunction)

    def treefunction(self, index):
    print index


    def addItems(self, parent, elements):

        for text, children in elements:
            item = QStandardItem(text)
            parent.appendRow(item)
            if children:
                self.addItems(item, children)
if __name__ == "__main__":

    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
4

1 に答える 1

5

簡単な修正。シグナルはQModelIndexを返しますが、itemFromIndexを使用して、モデル内のそのインデックスのアイテムを検索する必要があります

def treefunction(self, index):
    print index.model().itemFromIndex(index).text()
    # print self.model.itemFromIndex(index).text()

モデルをインデックスから外すか、具体的にはモデル属性を使用することができます。

そして、私は表彰台を獲得していますが、Qt 4.5+を使用している限り、信号とスロットを接続するための本当に素晴らしい新しいスタイルのアプローチについて言及したいと思います。

self.treeView.clicked.connect(self.treefunction)

文字列ベースの署名を指定する必要がなくなったことに注目してください。シグナルオブジェクトに直接アクセスし、接続する呼び出し可能スロットを指示するだけの完全なオブジェクトスタイルです。

于 2012-07-16T00:44:44.717 に答える