PyQt4:将项目从一个QListWidget移动到另一个

时间:2012-03-15 02:43:40

标签: python pyqt4 qlistwidget

我在Qt Designer上创建了一个界面,并在QGIS插件中使用它。界面由来源listWidget,目标listWidgetpushButton组成。

我正在尝试将选定的项目从源listWidget转移到目标listWidget

我使用源代码listWidget填充了

self.ui.listWidget_1.addItems(soilList)

到目前为止,我已将按钮信号写为:

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

但是现在我无法编写填充目标click_pushButton的{​​{1}}函数。任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:2)

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_1click_pushButton没有说明这些内容的含义。

并使用new style signals and slots。您可以像这样编写连接语句:

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

答案 1 :(得分:0)

除非克隆,否则QListwidgetitem只能存在于一个QListwidget中。

这是一个简单的PyQt5解决方案,它避免了对索引进行记账:

self.ui.clone_items_button.clicked.connect(self.clone_selected_listwidgetitems)

def clone_selected_listwidgetitems(self)
    for sel_item in self.ui.source_listwidget.selectedItems():
        cloned_item = sel_item.clone()
        self.ui.destination_listwidget.addItem(cloned_item)