2

我在 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。任何帮助将不胜感激,谢谢!

4

2 回答 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_1或者click_pushButton只字不提这些代表什么。

并使用新样式的信号和插槽。您可以像这样编写连接语句:

self.ui.pushButton.clicked.connect(self.click_pushButton)
于 2012-03-15T03:08:36.493 回答
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)
于 2020-02-05T15:40:32.657 回答