2011-06-22 14 views
-1

データリストモデルのデータリストを特定のパスの内容で埋めるにはどうすればよいですか?ここでPyQtとListModel

は私がやろうとしているものです:

class TestListModel(QAbstractListModel): 
    def __init__(self, parent=None): 
     QAbstractListModel.__init__(self, parent) 
     self.testnames = [] 

    def load_docfiles(self): 
     cfg = Config() 
     for filename in glob.glob(os.path.join(cfg.test_path, 'test_*.rst')): 
      self.testnames = os.path.basename(filename)[5:-4] 
      filepath = os.path.abspath(filename) 
      print "load docfile", str(self.testnames) 
     return str(self.testnames) 

    def rowCount(self, index): 
     return len(self.testnames) 

    def data(self, index, role): 
     if role == Qt.DisplayRole: 
      cfg = Config() 
      for filename in glob.glob(os.path.join(cfg.test_path, 'test_*.rst')): 
       self.testnames = os.path.basename(filename)[:-4] 
       filepath = os.path.abspath(filename) 
     return self.testnames 

    def columnCount(self, index): 
     pass 

もう一つの問題は、どのように私は私のリストビューから選択した項目に関連付けられている(qwebview中)HTMLページを読み込むことができますか?

ありがとうございます!

答えて

1

QtのModelクラスでdataメソッドの目的を誤解していると思います。データをリロードする場合(ファイル名のリストの場合)、dataメソッドは、QListViewのインデックスをtestnamesリストの項目にマッピングする必要があります。例えば、

def data(self, index, role): 
    if role == Qt.DisplayRole: 
     testname = self.testnames[index.row()] 
     return testname 

それはあなたのload_docfiles方法はself.testnames内のファイル名のリストを保存するように見えます。あなたはこのようにそれを書き換えることができます:

def load_docfiles(self): 
    cfg = Config() 
    for filename in glob.glob(os.path.join(cfg.test_path, 'test_*.rst')): 
     self.testnames.append(os.path.basename(filename)[5:-4]) 
     filepath = os.path.abspath(filename) 
     print "load docfile", str(self.testnames) 

あなたのクラスは、このようなあなたのメインアプリケーションから呼び出すことができます:私はしたいとき、それは今よりよく動作しますが、

self.view = QtGui.QListView(self) 
self.model = TestListModel() 
self.model.load_docfiles() 
self.view.setModel(self.model) 
+0

ありがとう:テスト名= self.model。 (アイテム、ロール) testname = self.testnames [index.row()] AttributeError: 'リスト'オブジェクトに属性 '行'がありません – user732663

+0

'item'とは何ですか? 'data'はインデックスと役割が与えられることを期待しています。 'index'はQModelIndexでなければなりませんが、あなたがリストを渡そうとしているようです。 –

+0

アイテムは、現在のテストがリストで選択され、ここでそれを取得するための方法であって、getSelectedTestName(自己)defで: 項目= self.list.selectedIndexes() 印刷「が選択テスト」、アイテム リターン項目 – user732663