プラグインビルダーで作成したQGISプラグインに2番​​目のツールバーボタンとダイアログを追加するにはどうすればよいですか?


8

2つのボタンを持つツールバーを作成します。各ボタンは異なるフォームを開きます。

私が従った手順は次のとおりです。

  • プラグインビルダーを使用してプラグインを作成しました

  • 実装ファイルで必要な変更を行うことにより、2つのボタンを持つツールバーを作成しました。

ここまでは、すべてが正常に機能するため、最初のボタンをクリックすると、対応するフォームが正しく開きます。このフォームは、Plugin Builderによって作成されたものです。

次に、2番目のボタンをクリックすると開く2番目のフォームが必要です。そう:

  • Qtデザイナー(form2.ui)で新しいフォームを作成し、

  • uiファイルをpyファイルに変換し(make)、変換したpyファイルから実装ファイルにクラスをインポートし、クラスのインスタンスを取得しました(self.dlg2 = Ui_form2())

そして私が書いた実装ファイルのrun()メソッドで:

def run2(self):
    self.dlg2.show()
    result = self.dlg2.exec_()

しかし、この新しいフォームには.show()メソッドがないというエラーメッセージが表示されます。.show()メソッドを実装するために何かを継承する必要がありますか?しかし、UIファイルから変換されたpyファイルのすべての変更を保存できないので、何かを継承するために2番目のフォームのコードをどのように変更できますか?

回答:


5

次に、2番目のツールバーボタンとそれに対応するダイアログを実装するために行った操作を示します。

  1. plugin.pyファイルを編集して、run2()メソッド、self.dlg2変数、の新しいアクションinitGui()、およびこのインポートを追加します。

    from plugin_dialog2 import pluginDialog2
  2. UIファイルをコピーして貼り付け、名前を変更しますform2.ui(オプションで、Qt-Designerで開き、windowTitleプロパティを変更して両方のダイアログを視覚的に区別します)。

  3. plugin_dialog.pyファイルをコピーして貼り付け、名前をplugin_dialog2.py

  4. plugin_dialog2.pyクラス名をpluginDialog2、スーパーの最初のパラメーターをabcDialog2、およびUIファイルの名前を調整してファイルを編集します。

    import os
    from PyQt4 import QtGui, uic
    
    FORM_CLASS, _ = uic.loadUiType(os.path.join(
        os.path.dirname(__file__), 'form2.ui'))
    
    class abcDialog2(QtGui.QDialog, FORM_CLASS):
        def __init__(self, parent=None):
            """Constructor."""
            super(abcDialog2, self).__init__(parent)
            self.setupUi(self)
    

ここから2つのダイアログを備えたデモプラグインをダウンロードできます。


どうもありがとうございました!!!これは正常に機能し、同時にプラグインの構築についての理解が深まりました。たとえば、上記の手順は、たとえば、3つまたは4つのボタンがあり、それぞれが開いている場合、より多く適用できると思います。別のフォーム。しかし、3番目のボタンがツールバーに表示されません。なぜこれが起こっているのでしょうか?
エレフテリア2016年

2
そうです、変数やクラスなどの名前付け順序を維持している限り、必要な回数だけ機能するはずです。たとえば、3番目のボタンを追加するにはinitGui()、次の方法でに新しいアクションを追加する必要があります。 self.add_action( icon_path, text=self.tr(u'plugin3'), callback=self.run3, parent=self.iface.mainWindow())
GermánCarrillo

ええと、それは私がコンピュータを再起動した後、結局大丈夫です...
Eleftheria '26

8

。使用プラグインビルダー新しいプラグインを作成します

作成されたファイルは次の図に示されています

ここに画像の説明を入力してください

OSGeo4Wシェルを使用して、リソースファイル(resources.qrc)をPythonファイル(resources.py)に変換します。

pyrcc4 -o resources_rc.py resources.qrc

あなたがあればその後、プラグインフォルダ内に見て、あなたは新しい気づくの.pyファイルresources.pyばかりに作成されたファイルを。これで、メインのQGISメニュー> [プラグインの管理とインストール]からプラグインをインストールして開くことができます。

ツールバーとツール(ボタン)を作成し、ツールバーにツールを追加する方法

エディターでmy_toolbar.pyファイルを開き、initGui(self)のセクションに次のように書き込みます。

def initGui(self):

    self.toolBar = self.iface.addToolBar("MY TOOLBAR tools")
    self.toolBar.setObjectName("MY TOOLBAR tools")

    self.act1 = QAction(QIcon(":/plugins/Myplugintoolbar/icon.png"), QCoreApplication.translate("IMPRESStoolbar", "Tool1"), self.iface.mainWindow())
    self.act2 = QAction(QIcon(":/plugins/Myplugintoolbar/icon.png"), QCoreApplication.translate("IMPRESStoolbar", "Tool2"), self.iface.mainWindow())
    self.act3 = QAction(QIcon(":/plugins/Myplugintoolbar/icon.png"), QCoreApplication.translate("IMPRESStoolbar", "Tool3"), self.iface.mainWindow())

このようにして、3つのボタン/ツールが作成されました。

ボタンをツールバーに表示するには、次のように記述し続けます。

    self.toolBar.addAction(self.act1)
    self.toolBar.addAction(self.act2)
    self.toolBar.addAction(self.act3)

ボタンをクリックしてGUIを開くには、次のように書き続けます。

    QObject.connect(self.act1, SIGNAL("triggered()"), self.runtool1)
    QObject.connect(self.act2, SIGNAL("triggered()"), self.runtool2)
    QObject.connect(self.act3, SIGNAL("triggered()"), self.runtool3)

runtool1runtool2runtool3の各メソッドは、ボタンごとに異なるGUIを開くために、以下のように定義されています

def runtool1(self):
     self.dlgtool1.show()

def runtool2(self):
     self.dlgtool2.show()

def runtool3(self):
     self.dlgtool3.show()

このようにして、tool1ボタンをクリックするとgui dlgtool1が開き、tool2ボタンをクリックするとdlgtool2が開き、tool3ボタンをクリックするとdlgtool3 guiが開きます。

dlgtool1dlgtool2dlgtool3、ダイアログを表すuiファイルを指す変数である必要があります

したがって、ダイアログは次のようにする必要があります。

  • 作成

  • メインのpyファイルmy_toolbar.py)にインポートされ、

  • 変数のインスタンス取得するために、変数dlgtool1dlgtool2、およびdlgtool3)に割り当てられます。

ダイアログを作成するには

  • ファイルmy_toolbar_dialog.pyおよびmy_toolbar_dialog_base.ui をコピーし、別のフォルダに貼り付けて、名前を変更できるようにします。この例では3回、必要なだけこれを実行します。 次に、これらの新しいファイルをコピーして、Myplugintoolbarフォルダーに貼り付けます。 ここに画像の説明を入力してください

以下の変更を適用するために、エディターでForm_dlgtool1_dialog.pyを開きます。

から

import os
from PyQt4 import QtGui, uic

FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'my_toolbar_dialog_base.ui'))

class MyplugintoolbarDialog(QtGui.QDialog, FORM_CLASS):
    def __init__(self, parent=None):
        super(MyplugintoolbarDialog, self).__init__(parent)
        self.setupUi(self)

に変更

import os
from PyQt4 import QtGui, uic

FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'Form_dlgtool1.ui'))

class Formdlgtool1Dialog(QtGui.QDialog, FORM_CLASS):
    def __init__(self, parent=None):
        super(Formdlgtool1Dialog, self).__init__(parent)
        self.setupUi(self)

他の2つのファイル(Form_dlgtool2_dialog.pyおよびForm_dlgtool3_dialog.py)についても同じ手順に従います。

次に、ダイアログをメインファイルにインポートするために、エディターでmy_toolbar.pyファイルを開き、以下をインポートします。

from Form_dlgtool1_dialog import Formdlgtool1Dialog

from Form_dlgtool2_dialog import Formdlgtool2Dialog

from Form_dlgtool3_dialog import Formdlgtool3Dialog

最後に、それらのインスタンスを取得するためにdef __init __(self、iface)セクション内に次のように記述します。

self.dlgtool1 = Formdlgtool1Dialog()
self.dlgtool2 = Formdlgtool2Dialog()
self.dlgtool3 = Formdlgtool3Dialog()

これで、QtDesignerでuiファイルを開いてカスタマイズできます。次に、QGIS内のプラグインツールバーをリロードして、次の結果を取得します

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.