0

Qt Creator を使用して Plugin ビルダーから生成された UI ファイルを拡張しました。いくつかのチェックボックスと、layercombo という名前のコンボボックスをフォームに追加しました。アプリケーションの名前は jacktest.py です。中間ファイル jackdialog.py を使用します (プラグイン ビルダーから生成され、変更されません)。

UI ファイルとリソース ファイルをコンパイルしました。次に、プラグインにいくつかのコードを追加し、これをテストしました。QMessagebox で利用可能なレイヤー名を取得することは問題ありません。しかし、これらをコンボボックスに追加する方法は? シンプルにする必要がありますが、コンボボックスの参照に成功するオプションはありません。

エラー メッセージ: AttributeError: jacktest インスタンスに属性 'layercombo' がありません。

私の最近の試みの結果:

# run method that performs all the real work
def run(self):

    # create and show the dialog
    dlg = jacktestDialog()
    # show the dialog
    dlg.show()
    result = dlg.exec_()
    for layer in self.iface.legendInterface().layers():
        if layer.type() == QgsMapLayer.VectorLayer:
           QMessageBox.information( self.iface.mainWindow(), "Info", layer.name())
           self.layercombo.Items.Insert(0, layer.name())
    # See if OK was pressed
    if result == 1:
        # do something useful (delete the line containing pass and
        # substitute with your code
        pass
4

2 に答える 2

0

実行モジュール内でシグナルを開発しました(コード:def run(self):)

QObject.connect(dlg.ui.layercombo、SIGNAL('currentIndexChanged(int)')、self.select_one)

select_oneのコードは次のとおりです。

def select_one(self):
    comboindex = dlg.ui.layercombo.currentIndex()
    QMessageBox.information(self.iface.mainWindow(), "Info", comboindex)

エラーメッセージ:

comboindex = dlg.ui.layercombo.currentIndex()NameError:グローバル名'dlg'が定義されていません

関数呼び出しのパラメーターとしてdlgを参照する必要があると仮定しますが、これは今まで機能していません。

于 2012-05-28T21:45:12.337 に答える
0

レイヤーコンボアイテムを設定しているときに、現在のクラス (ダイアログではない) を参照しようとしています

交換:

self.layercombo.Items.Insert(0, layer.name())

dlg.ui.layercombo.Items.Insert(0, layer.name())

ただし、ブロックしているとコードが正しく機能せずexec_()、返されるまで待機するため、非表示のダイアログに項目を追加しています。

代わりにこれを試してください:

# create and show the dialog
dlg = jacktestDialog()
# show the dialog
for layer in self.iface.legendInterface().layers():
    if layer.type() == QgsMapLayer.VectorLayer:
       QMessageBox.information( self.iface.mainWindow(), "Info", layer.name())
       dlg.ui.layercombo.Items.Insert(0, layer.name())
result = dlg.exec_()
于 2012-05-22T13:05:06.143 に答える