PyQt4:将项目从一个QListWidget移至另一个

问题描述 投票:2回答:2

我在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_pushButtonlistWidget函数时遇到了麻烦。任何帮助将不胜感激,谢谢!

python pyqt4 qlistwidget
2个回答
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。您可以这样编写connect语句:

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.