2012-03-15 50 views
2

我创建了Qt设计的接口,并在QGIS插件,使用它我。该接口由源listWidget,目的地listWidgetpushButton组成。PyQt4的:移动从一个QListWidget项目的方式

我试图在把所选项目从源listWidget到目的地listWidget

我通过我的源listWidget填充使用:

self.ui.listWidget_1.addItems(soilList) 

而且到目前为止,我已经写了我的按钮信号为:

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

但现在我无法写click_pushButton功能填充目的地listWidget。任何帮助将不胜感激,谢谢!

回答

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。您可以编写连接语句是这样的:

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

非常感谢!我也尝试编写一个代码,用于一次移动ListWidget中的所有项目: def move_all_items_todestination(self): 索引在范围内(len(self.ui.sourceList)): self.ui.destinationList.addItem (self.ui.sourceList.takeItem(index)) 但是,当我执行pushButton时,它只将我的源listWidget中的一半项目移动到我的目标listWidget,而不是所有项目。任何想法为什么这样做? – 2012-03-15 21:31:23

+0

@ user1270516:哎哟! :)。 '.takeItem'删除了索引被移动的东西。您需要从最大的索引开始。我会编辑我的答案。 – Avaris 2012-03-15 21:47:19

相关问题