PyQt4:将项目从一个 QListWidget 移动到另一个
Posted
技术标签:
【中文标题】PyQt4:将项目从一个 QListWidget 移动到另一个【英文标题】:PyQt4: Move items from one QListWidget to another 【发布时间】:2012-03-15 02:43:39 【问题描述】:我在 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)
但现在我无法编写填充目标listWidget
的click_pushButton
函数。任何帮助将不胜感激,谢谢!
【问题讨论】:
【参考方案1】: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)
【讨论】:
非常感谢!我还尝试编写一个代码,一次移动 ListWidget 中的所有项目: def move_all_items_todestination(self): for index in range(len(self.ui.sourceList)): self.ui.destinationList.addItem(self. ui.sourceList.takeItem(index)) 但是当我执行 pushButton 时,它只会将我的源 listWidget 中的一半项目移动到我的目标 listWidget 而不是全部。关于它为什么这样做的任何想法? @user1270516:哎哟! :)。.takeItem
删除了这个东西,所以索引被移动了。您需要从最大的索引开始。我将编辑我的答案。【参考方案2】:
除非克隆,否则 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)
【讨论】:
以上是关于PyQt4:将项目从一个 QListWidget 移动到另一个的主要内容,如果未能解决你的问题,请参考以下文章
PyQt4:如何获取 QlistWidget 的可见项目列表?
PyQt4:使用 QPushButton 小部件从 QList 小部件中删除项目