2

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関数を書くのに苦労していますlistWidget。どんな助けでも大歓迎です、ありがとう!

4

2 に答える 2

2

QListWidget.selectedIndexes()選択したアイテムのインデックスのリストを返します。各インデックスには.row()、アイテムの行を返すメソッドがあります。次に、 を使用.takeItem()して最初のリストから項目を取得 (および削除) し、 を介して 2 番目のリストに追加でき.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、これらが何を表しているかについて何も言いません。

そして、新しいスタイルの信号とスロットを使用してください。この接続ステートメントを次のように記述できます。

self.ui.pushButton.clicked.connect(self.click_pushButton)
于 2012-03-15T03:08:36.493 に答える