如何根据在 ListView 1 上单击的项目更新 ListView 2

How to updated ListView 2 based on Item clicked on ListView 1

我是 MVC 和 PyQt 编程的新手。我想找出在单击另一个 ListView 中的项目时更新 ListView 的方法。我要通过 MVC。

ListView 1 通过列出 XML 文件的所有主节点进行更新。 ListView 2 应使用 ListView 1 中单击的父节点的子节点进行更新。

我如何从 ListView1 (onClicked()) 发出信号并在 ListView2 中捕获被单击的正确项目。一旦我有了这个项目,我就可以将它与现有逻辑一起使用,以使用这个项目填充 ListView2。

到目前为止,我已经尝试了不同的方法,但 none 奏效了。其中:

val = ListView1.clicked.connect(getRowName)

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

"data" 即使在单击 ListView1 中的项目后,变量也没有任何值。

还有一件事,我是否必须为 ListView 1 和 ListView 2 分别考虑两个模型?

您可能需要考虑使用 QListWidgetsQListWidgetItemsQListWidgets 有一个 itemSelectionChanged 信号。

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

如果您设置为使用 QListView,您可以子类化 QListView 并覆盖 selectionChanged 方法,该方法在选择更改时调用。您可以直接在该回调中对列表 2 进行更新,或者让它发出类似于 QListWidget 的自定义信号,然后使用 list2 更新函数处理该信号。

class MyList(QListView):

    itemSelectionChanged = pyqtSignal()

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

是的,如果每个列表视图显示不同的数据,那么您将需要使用不同的模型。