Apa tujuan dari beberapa fungsi dan file di plugin Python QGIS?

8

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.

  1. __init__( self, iface )
  2. tr( self, message )
  3. add_action( self )
  4. initGui( self )
  5. unload( self )
  6. run( self )
Pengguna123
sumber
Ada beberapa informasi dalam tautan berikut ini: docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/… . Sayangnya saya tidak berpikir ada 'Panduan Dummies' dalam mengembangkan plugin QGIS (seperti yang saya yakin bisa lakukan dengan itu!).
Joseph
maaf untuk mengatakan bahwa url di atas tidak ditemukan di server.
User123
Ini adalah pertanyaan Python murni tentang penciptaan kelas (umum dan dengan PyQt4 ). Satu-satunya pertanyaan PyQGIS di sini adalah apa itu iface(antarmuka QGIS). Tampaknya bagi saya bahwa jika Anda mengenal Python, skrip-skripnya cukup jelas (dengan semua # deskripsi)
gen
Baik. Saya hanya ingin tahu bagaimana masing-masing fungsi akan mencerminkan qgis. Katakan misalnya jalankan perubahan kode fungsi akan tercermin di plugin kami.
User123
Aneh, url berfungsi sebelum ... coba ini: docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/…
Joseph

Jawaban:

16

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__.pyFile memungkinkan QGIS mengetahui Plugin folder adalah modul Python. Itu harus mengandung classFactory(iface)fungsi yang QGIS gunakan untuk menginisialisasi plugin Anda, memanfaatkan kelas Plugin utama Anda, yang ada di mainPlugin.pyfile.

metadata.txt adalah tempat Anda menentukan metadata plugin Anda, yaitu, nama plugin, penulis, lisensi, versi, beranda, bugtracker, repositori, antara lain.

mainPlugin.pymungkin disebutkan dengan cara lain. Ini adalah file yang dirujuk __init__.pydan 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:

  1. __init__( self, iface )

    Ini adalah konstruktor dari plugin Anda. Ketika QGIS mengenali folder sebagai plugin Python, __init__()metode ini dijalankan, dan objek antarmuka iface,, 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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 ).

  6. 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.

Germán Carrillo
sumber
1
Terima kasih gcarrillo untuk penjelasan Anda yang jelas. Saya yakin itu akan sangat membantu saya sebagai pemula.
User123
1
Pertanyaan tentang metode jalankan . Saya juga melihatnya bernama onRun . Dapatkah saya berasumsi bahwa penamaan itu tidak masalah, tetapi umumnya mengandung kata kehabisan kebiasaan?
BritishSteel
2
Benar @BritishSteel, Anda bisa memberi nama metode yang Anda inginkan. run()adalah semacam konvensi. Biasanya di initGui()Anda mengatur koneksi antara klik pada tombol plugin Anda dan run()metode Anda , jadi jika Anda ingin memberikan nama lain, Anda juga harus memperbarui slot yang digunakan dalam koneksi ini. Sesuatu seperti self.action.triggered.connect(self.myCustomRun).
Germán Carrillo
1
Ini luar biasa, saya juga akan menemukan ini sangat berguna!
Joseph
@ gcarrillo: pada poin ke-3, Anda telah menyebutkan "Ini adalah fungsinya, terlihat pada plugin yang dihasilkan melalui pembuat plugin". Saya hanya ingin tahu apa saja cara mengembangkan plugin selain pembuat plugin.
User123