2012-03-15 5 views
2

Qt Designerでインターフェイスを作成し、QGISプラグインで使用しています。インタフェースは、ソースlistWidget、宛先listWidget、およびpushButtonからなる。PyQt4:1つのQListWidgetから別のQListWidgetにアイテムを移動する

ソースlistWidgetから選択したアイテムを宛先listWidgetに持って行きます。使用して私の元listWidgetによって移入

I:

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()を介して2番目のリストに追加することができます。

に変換:ところで

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を使用してください。このようなconnect文を書くことができます:

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に移動します。なぜそれがそれを行うのか? –

+0

@ user1270516:おっと! :)。 '.takeItem'は、索引がシフトされるように物を削除します。最大のインデックスから始める必要があります。私は私の答えを編集します。 – Avaris

関連する問題