Saya hanya mencoba memahami arsitektur Plugin QGIS yang dibuat dengan QGIS Plugin Builder, serta alur kerja dan keterkaitan antara file yang dihasilkan. Jika memungkinkan, saya lebih suka diagram.
Akan sangat membantu untuk mengetahui apa fungsi-fungsi berikut lakukan dalam kode Python. Saya baru dalam pembuatan Plugin QGIS.
__init__( self, iface )
tr( self, message )
add_action( self )
initGui( self )
unload( self )
run( self )
qgis
python
qgis-plugins
pyqgis
Pengguna123
sumber
sumber
iface
(antarmuka QGIS). Tampaknya bagi saya bahwa jika Anda mengenal Python, skrip-skripnya cukup jelas (dengan semua # deskripsi)Jawaban:
The PyQGIS Cookbook menjelaskan apa file yang umum di plugin QGIS. Seperti yang Anda lihat di sana, Anda hanya perlu tiga file untuk menjalankan plugin minimal:
__init__.py
metadata.txt
mainPlugin.py
The
__init__.py
File memungkinkan QGIS mengetahui Plugin folder adalah modul Python. Itu harus mengandungclassFactory(iface)
fungsi yang QGIS gunakan untuk menginisialisasi plugin Anda, memanfaatkan kelas Plugin utama Anda, yang ada dimainPlugin.py
file.metadata.txt
adalah tempat Anda menentukan metadata plugin Anda, yaitu, nama plugin, penulis, lisensi, versi, beranda, bugtracker, repositori, antara lain.mainPlugin.py
mungkin disebutkan dengan cara lain. Ini adalah file yang dirujuk__init__.py
dan berisi fungsi yang Anda sebutkan dalam pertanyaan Anda. Saya akan mengatakan file ini adalah inti dari plugin Anda.Mengenai QGIS Plugin Builder, saya sarankan Anda untuk membaca dokumentasi resmi untuk mendapatkan gambaran bagaimana itu disusun. Saya sebenarnya lebih suka untuk tidak menggunakan plugin seperti itu, karena itu menciptakan banyak hal yang tidak ingin Anda ketahui saat Anda mempelajari dasar-dasar pengembangan plugin.
Saya sarankan Anda mulai dari plugin yang Anda sepenuhnya mengerti. Yaitu, mulailah dengan struktur plugin yang sangat mendasar (bahkan minimal) dan tambahkan kompleksitas hanya jika diperlukan, dan ketika Anda menguasai dasar-dasarnya.
Di sisi lain, saya akan memberi tahu Anda apa fungsi yang Anda sebutkan untuk:
__init__( self, iface )
Ini adalah konstruktor dari plugin Anda. Ketika QGIS mengenali folder sebagai plugin Python,
__init__()
metode ini dijalankan, dan objek antarmukaiface
,, diteruskan ke plugin Anda, sehingga dapat mengakses QGIS sesudahnya.Anda harus menggunakan metode ini untuk menyimpan referensi ke
iface
(karena itu akan menjadi titik masuk Anda ke komponen QGIS) serta untuk menginisialisasi variabel lain yang akan Anda gunakan dalam fungsi lain dari plugin Anda.tr( self, message )
Ini adalah fungsi Python untuk mendapatkan terjemahan dari string. Tentu saja Anda harus memberikan terjemahan, tetapi Anda melakukannya di file Qt lainnya (yaitu, dalam file .ts).
Secara umum, Anda tidak akan memerlukan fungsi ini kecuali Anda akan mendukung bahasa selain bahasa Inggris. Ini jelas bukan prioritas bagi pengembang PyQGIS baru.
add_action( self )
Ini adalah fungsi yang hanya saya lihat dalam plugin yang dihasilkan melalui QGIS Plugin Builder. Ini membantu Anda mengatur GUI plugin Anda. Saya pribadi tidak menggunakannya di plugin saya.
initGui( self )
Ini adalah metode untuk mengatur GUI Plugin Anda dalam QGIS. Di sini Anda menentukan apakah Anda ingin tombol di toolbar QGIS Plugin, toolbar kustom, tombol di dalam menu QGIS yang ada, dan / atau (tidak disarankan) menu kustom baru.
Ini juga merupakan tempat yang baik untuk membangun koneksi SIGNAL / SLOT antara tombol plugin Anda (atau kontrol lainnya) dan fungsi Anda.
unload( self )
Ini adalah metode untuk menghapus widget plugin Anda (tombol, menu, dan sejenisnya) dari QGIS GUI.
Ini juga merupakan tempat yang baik untuk memutuskan SIGNALS dan SLOTS yang telah Anda sambungkan
initGui( self )
.run( self )
Ini adalah metode utama plugin Anda. Di sini Anda meletakkan kode yang akan berjalan ketika pengguna mengklik tombol plugin Anda. Secara umum, Anda mulai dengan mendapatkan beberapa data dari proyek QGIS saat ini dan kemudian melakukan beberapa pengeditan, pemrosesan, atau pelaporan. Ini sepenuhnya terserah Anda.
Jika plugin Anda memiliki dialog, ini adalah metode di mana Anda harus membukanya, sehingga pengguna dapat mulai berinteraksi dengan dialog. Logika dialog biasanya ditangani dalam file Python lain, untuk mendistribusikan kode Anda dan mendukung pemeliharaan dan enkapsulasi.
Perhatikan bahwa
run()
ini bukan tempat yang baik untuk mengatur koneksi SIGNAL / SLOT, karena dengan melakukannya, mereka akan disetel setiap kali Anda membuka dialog plugin Anda, memicu fungsi (SLOT) Anda beberapa kali seperti dalam perilaku Ganjil dalam plugin QGIS: fungsi saya adalah dipicu dua kali .Terakhir, cara terbaik untuk belajar memprogram plugin QGIS adalah membaca kode sumber plugin lain. Mulailah dengan yang sederhana dan ketika Anda menguasainya, silakan yang lebih kompleks.
Saya telah membuat plugin demo (sangat sederhana) untuk membantu Anda memahami cara kerja plugin QGIS. Anda dapat mengaksesnya dari sini . Ada instruksi instalasi di file README. Plugin memberi tahu Anda, melalui kotak pesan, kapan setiap fungsi yang Anda minta dijalankan.
sumber
run()
adalah semacam konvensi. Biasanya diinitGui()
Anda mengatur koneksi antara klik pada tombol plugin Anda danrun()
metode Anda , jadi jika Anda ingin memberikan nama lain, Anda juga harus memperbarui slot yang digunakan dalam koneksi ini. Sesuatu sepertiself.action.triggered.connect(self.myCustomRun)
.