PyQt4: перемещать элементы из одного QListWidget в другой - PullRequest
2 голосов
/ 15 марта 2012

Я создал интерфейс в Qt Designer и использую его в плагине QGIS. Интерфейс состоит из источника listWidget, пункта назначения listWidget и pushButton.

Я пытаюсь перенести выбранные предметы из источника listWidget в пункт назначения listWidget.

Я заполнил свой источник listWidget, используя:

self.ui.listWidget_1.addItems(soilList)

И пока я записал свой сигнал кнопки как:

QObject.connect(self.ui.pushButton, SIGNAL("clicked()"), self.click_pushButton)

Но теперь у меня проблемы с написанием функции click_pushButton, которая заполняет пункт назначения listWidget. Любая помощь будет оценена, спасибо!

1 Ответ

2 голосов
/ 15 марта 2012

QListWidget.selectedIndexes() вернет список индексов для выбранных элементов. Где у каждого индекса есть метод .row(), возвращающий строку элемента. Затем вы можете использовать .takeItem() для получения (и удаления) элемента из первого списка и добавления его во второй список с помощью .addItem().

Это означает:

def click_pushButton(self):
    # sort rows in descending order in order to compensate shifting due to takeItem
    rows = sorted([index.row() for index in self.ui.listWidget_1.selectedIndexes()],
                  reverse=True)
    for row in rows:
        # assuming the other listWidget is called listWidget_2
        self.ui.listWidget_2.addItem(self.ui.listWidget_1.takeItem(row))

# moving all items:
def click_pushButton(self):
    for row in reversed(range(self.ui.listWidget_1.count()):
        # assuming the other listWidget is called listWidget_2
        self.ui.listWidget_2.addItem(self.ui.listWidget_1.takeItem(row))

Кстати, пожалуйста, дайте вашим виджетам / методам осмысленные имена. listWidget_1 или click_pushButton ничего не говорит о том, что они означают.

И использовать сигналы нового стиля и слоты . Вы можете написать это оператор подключения следующим образом:

self.ui.pushButton.clicked.connect(self.click_pushButton)
...