2016-03-22 1 views
0

Я новичок в программировании MVC и PyQt. Я хотел выяснить способ обновления ListView при нажатии элемента из другого ListView. Я иду от MVC.Как обновить ListView 2 на основе элемента, нажатого на ListView 1

ListView 1 обновляется путем перечисления всех основных узлов XML-файла. ListView 2 должен быть обновлен дочерними узлами щелканного родительского узла из ListView 1.

Как я могу испустить сигнал из ListView1 (onClicked()) и захватить в ListView2 вместе с соответствующим щелчком по элементу. Когда у меня есть этот элемент, я могу использовать его с существующей логикой для заполнения ListView2 с помощью этого элемента.

До сих пор я пробовал использовать другой подход, но никто не работал. В том числе:

val = ListView1.clicked.connect(getRowName) 

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

Переменная «data» не имеет значения даже после нажатия на элемент в ListView1.

Еще одна вещь. Должен ли я рассмотреть две модели по одному для ListView 1 и ListView 2?

ответ

1

Возможно, вы захотите рассмотреть вопрос об использовании QListWidgets и QListWidgetItems. QListWidgets имеют сигнал itemSelectionChanged.

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

Если вы настроены на использование QListView, вы можете создать подкласс QListView и переопределить selectionChanged метод, который вызывается всякий раз, когда выбор изменяется. Вы можете либо выполнить обновление в списке 2 непосредственно в этом обратном вызове, либо исправить собственный сигнал, похожий на QListWidget, а затем обработать сигнал с помощью функции обновления списка2.

class MyList(QListView): 

    itemSelectionChanged = pyqtSignal() 

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

Да, если в каждом списке отображаются разные данные, тогда вам нужно будет использовать отдельные модели.

+0

Я использую sorrry, если я вас смутил, но по моему запросу я должен был использовать Clicked вместо Selected. Поэтому я пытаюсь найти способ получить элемент (который был нажат в ListView1) вместе с сигналом, используя который я могу обновить содержимое в ListView2. BTW Спасибо за ваш ответ. –

+0

Почему это должно быть на клике, а не на выборе? Это то, что вы действительно хотите? Если вы обновляете второй список на основе выбора в первом списке, вы хотите обновить его только после изменения выбора, не так ли? Если вы используете 'clicked', он будет обновлять второй список * каждый раз, когда клик регистрируется в первом списке, даже если ничего не выбрано и даже если выбор не изменяется. –

+0

Но как я могу передать информацию о том, какой ITEM в списке был выбран? Спасибо –

Смежные вопросы