【问题标题】:PyQt4: Move items from one QListWidget to anotherPyQt4:将项目从一个 QListWidget 移动到另一个
【发布时间】:2012-03-15 02:43:39
【问题描述】:

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

我正在尝试将所选项目从源 listWidget 带到目标 listWidget

我使用我的来源 listWidget 填充:

self.ui.listWidget_1.addItems(soilList)

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

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

但现在我无法编写填充目标listWidgetclick_pushButton 函数。任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: python pyqt4 qlistwidget


    【解决方案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_1click_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)
    

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多