2016-03-22 7 views
0

私はMVCとPyQtプログラミングが初めてです。私は別のListViewから項目をクリックするとListViewを更新する方法を理解したかったのです。私はMVCに行く。ListView 1をクリックしたアイテムに基づいてListView 2を更新する方法

リストビュー1は、XMLファイルのすべてのプライマリノードをリストすることによって更新されます。 ListView 2はListView 1のクリックされた親ノードの子ノードで更新する必要があります。

ListView1(onClicked())からシグナルを出し、クリックした適切なItemとともにListView2でキャプチャする方法を教えてください。いったんこのItemを取得すると、既存のロジックでこのItemを使用して、このItemを使用してListView2を設定できます。

今まで私は別のアプローチを試みましたが、何も働いていませんでした。以下を含む:

val = ListView1.clicked.connect(getRowName) 

def getRowName(): 
    data = ListView1.selectedIndexes() 
    print(data) 
    return data 

"data"変数は、ListView1の項目をクリックしても値を保持しません。

もう1つ、ListView 1とListView 2の2つのモデルをそれぞれ1つずつ考慮する必要がありますか?

答えて

1

QListWidgetsQListWidgetItemsを使用することをお勧めします。 QListWidgetsitemSelectionChangedシグナルを持っています。あなたがQListViewを使用して設定されている場合

listwidget1 = QListWidget(self) 
listwidget2 - QListWidget(self) 
listwidget1.itemSelectionChanged.connect(function_that_updates_listwidget2) 

、あなたはQListViewをサブクラス化し、選択が変更されるたびに呼び出されselectionChangedメソッドをオーバーライドすることができます。そのコールバックでリスト2の更新を直接行うか、QListWidgetのようなカスタム信号を送出させてから、list2更新関数を使ってシグナルを処理します。

class MyList(QListView): 

    itemSelectionChanged = pyqtSignal() 

    def selectionChanged(self, selected, deselected): 
     super(MyList, self).selectionChanged(selected, deselected) 
     self.itemSelectionChanged.emit() 

はい、各リストビューに異なるデータが表示されている場合は、別々のモデルを使用する必要があります。

+0

私はあなたを混乱させてしまいましたが、私の質問では、Selectedの代わりにClickedを使用していたはずです。だから、ListView2のコンテンツを更新するために、ListView1でクリックされたアイテムを取得する方法をシグナルとともに調べようとしています。 BTWあなたの答えをありがとう。 –

+0

選択とは対照的に、なぜクリックする必要がありますか?あなたが本当に欲しいのはそれですか?最初のリストの選択に基づいて2番目のリストを更新する場合は、選択が変更されたときに更新するだけです。 'clicked'を使うと、何も選択されていなくても選択が変わっていなくても、最初のリストにクリックが登録されるたびに2番目のリストを更新します。 –

+0

しかし、リスト内のどの項目が選択されたのか、どのように情報を渡しますか?ありがとう –

関連する問題