Bagaimana saya bisa menambahkan Tombol dan Dialog Bilah Alat kedua ke plugin QGIS yang dibangun dengan Plugin Builder?


8

Saya ingin membuat toolbar dengan 2 tombol, masing-masing tombol membuka bentuk yang berbeda.

Langkah-langkah yang saya ikuti adalah:

  • Membuat plugin menggunakan Plugin builder

  • Membuat toolbar dengan 2 tombol dengan melakukan modifikasi yang diperlukan dalam file implementasi.

Sampai di sini, semuanya berfungsi dengan baik, jadi ketika tombol pertama diklik, formulir yang sesuai terbuka dengan benar. Formulir ini adalah yang dibuat oleh pembuat Plugin.

Lalu saya ingin memiliki formulir kedua yang akan terbuka ketika tombol kedua diklik. Begitu:

  • Membuat formulir baru di desainer Qt (form2.ui),

  • Diterjemahkan file ui ke file py (make) dan mengimpor kelas dari file py yang diterjemahkan ke dalam file implementasi, mendapat instance dari kelas (self.dlg2 = Ui_form2 ())

dan dalam menjalankan () metode dari file implementasi yang saya tulis:

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

Tapi kemudian saya mendapatkan pesan kesalahan bahwa formulir baru ini tidak memiliki metode .show (). Haruskah ia mewarisi sesuatu untuk mengimplementasikan metode .show ()? Tetapi bagaimana saya bisa memodifikasi kode dari bentuk kedua untuk mewarisi sesuatu karena semua perubahan dalam file py yang diterjemahkan dari file ui tidak dapat disimpan?

Jawaban:


5

Inilah yang saya lakukan untuk menerapkan tombol Toolbar kedua dan dialog yang sesuai:

  1. Edit plugin.pyfile untuk menambahkan run2()metode, self.dlg2variabel, tindakan baru initGui(), dan impor ini:

    from plugin_dialog2 import pluginDialog2
  2. Salin dan tempel file UI dan ganti namanya sebagai form2.ui(opsional, buka di Qt-Designer dan ubah windowTitleproperti untuk membedakan kedua dialog secara visual).

  3. Salin dan tempel plugin_dialog.pyfile dan ganti namanya menjadiplugin_dialog2.py

  4. Edit plugin_dialog2.pyfile yang menyesuaikan nama kelas menjadi pluginDialog2, parameter pertama super untuk abcDialog2, dan nama file 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)

Anda dapat mengunduh plugin demo dengan dua dialog dari sini .


Terima kasih banyak!!! Ini berfungsi dengan baik dan pada saat yang sama memberikan pemahaman yang lebih baik tentang bangunan plugin .. Jadi, saya akan berasumsi bahwa prosedur di atas dapat diterapkan lebih banyak kali, jika misalnya saya ingin memiliki 3 atau 4 tombol, masing-masing membuka bentuk yang berbeda. Tapi tombol ke-3 saya tidak muncul di toolbar. Tahu mengapa hal ini terjadi?
Eleftheria

2
Benar, itu harus bekerja sebanyak yang Anda butuhkan, selama Anda menyimpan variabel penamaan pesanan, kelas, dan sejenisnya. Misalnya, untuk menambahkan tombol ke-3 Anda perlu menambahkan tindakan baru initGui(), dengan cara ini: self.add_action( icon_path, text=self.tr(u'plugin3'), callback=self.run3, parent=self.iface.mainWindow())
Germán Carrillo

Ya, itu berfungsi baik pada akhirnya setelah saya me-restart komputer saya ...
Eleftheria

8

1 . Gunakan pembuat Plugin untuk membuat plugin baru

File yang dibuat ditunjukkan pada gambar berikut

masukkan deskripsi gambar di sini

2 . Konversikan file sumber daya ( resources.qrc ) menjadi file Python ( resources.py ) menggunakan OSGeo4W Shell

pyrcc4 -o resources_rc.py resources.qrc

Setelah itu, jika Anda melihat ke dalam folder plugin , Anda akan melihat file .py baru , file resources.py yang baru saja dibuat. Plugin sekarang dapat diinstal dan dibuka melalui menu QGIS utama> Kelola dan instal Plugin.

3 . CARA MEMBUAT TOOLBAR DAN ALAT (tombol) DAN TAMBAHKAN ALAT-ALAT DI TOOLBAR

Buka dengan editor file my_toolbar.py dan di bagian initGui (self) tulis:

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())

Dengan cara ini tiga tombol / alat telah dibuat.

Agar tombol muncul di bilah alat, lanjutkan menulis yang berikut:

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

Agar tombol ketika diklik untuk membuka gui lanjutkan menulis yang berikut ini:

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

Metode runtool1 , runtool2 dan runtool3 didefinisikan kemudian sebagai berikut untuk membuka gui yang berbeda untuk setiap tombol

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

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

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

Dengan begitu ketika tombol tool1 diklik, gui dlgtool1 akan terbuka, ketika tombol tool2 diklik, dlgtool2 akan terbuka dan ketika tombol tool3 diklik, gui dlgtool3 akan terbuka.

dlgtool1 , dlgtool2 dan dlgtool3 harus menjadi variabel yang menunjuk ke file ui yang mewakili dialog .

Jadi dialognya harus:

  • dibuat ,

  • diimpor ke file py utama ( my_toolbar.py ) dan

  • ditugaskan ke variabel ( dlgtool1 , dlgtool2 dan dlgtool3 ) untuk mendapatkan turunan dari mereka.

Untuk membuat dialog :

  • Salin file my_toolbar_dialog.py dan my_toolbar_dialog_base.ui dan rekatkan di dalam folder lain sehingga Anda dapat mengganti nama. Lakukan ini sebanyak yang diperlukan, untuk contoh ini tiga kali. Kemudian salin file-file baru ini dan rekatkan kembali ke folder Myplugintoolbar masukkan deskripsi gambar di sini

Buka Form_dlgtool1_dialog.py dengan editor untuk menerapkan modifikasi berikut:

Dari :

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)

Ubah ke :

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)

Ikuti prosedur yang sama untuk dua file lainnya ( Form_dlgtool2_dialog.py dan Form_dlgtool3_dialog.py )

Kemudian, untuk mengimpor dialog ke file utama buka file my_toolbar.py dengan editor dan impor yang berikut ini

from Form_dlgtool1_dialog import Formdlgtool1Dialog

from Form_dlgtool2_dialog import Formdlgtool2Dialog

from Form_dlgtool3_dialog import Formdlgtool3Dialog

Akhirnya, untuk mendapatkan contoh dari mereka , tuliskan yang berikut di bagian def __init __ (self, iface) :

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

Sekarang, Anda dapat membuka file ui di QtDesigner dan menyesuaikannya. Kemudian muat ulang toolbar plugin di dalam QGIS untuk mendapatkan hasil berikut hte

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.