我在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
的{{1}}函数。任何帮助将不胜感激,谢谢!
答案 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_1
或click_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)