Plugin mogok dengan "Tidak ada modul bernama qgsprojectionselectionwidget" di Windows?

8

Plugin Python QGIS saya berfungsi di Ubuntu (setidaknya untuk saya, dan semua bug fatal yang dilaporkan sejauh ini telah diselesaikan), tetapi ketika saya menjalankannya pada QGIS yang diinstal dari penginstalan resmi 2.10.1 64-bit untuk Windows (pada Windows 7 64- bit), saya tidak dapat menginstalnya karena kesalahan berikut:

This plugin is broken
No module named qgsprojectionselectionwidget

Pengguna lain melaporkan masalah ini juga. tetapi dengan pesan kesalahan lain (saya tidak tahu sistem operasi dan arsitektur apa yang dia miliki, tapi saya kira Windows dan 64-bit EDIT: Saya salah menebak, dia punya Mac OS X):

This plugin is broken
No module named qgsmaplayercombobox

Keduanya merujuk ke widget dalam bentuk GUI, yang saya buat melalui Qt Designer di Ubuntu. Qt Designer juga dilengkapi dengan penginstal QGIS untuk Windows dan mengklaim mengandung widget khusus QGIS yang sama, jadi masalahnya tidak ada pada widget yang hilang, dan QGIS harus mengenalinya - tetapi tidak.

Lantas bagaimana cara memperbaikinya? Plugin saya masih eksperimental, jadi saya bisa menambahkan "maaf, tidak berfungsi di Windows" ke metadata, tetapi itu bukan solusi nyata.

EDIT: perilaku yang sama dikonfirmasi pada versi 32-bit juga.

Sekarang saya menemukan petunjuk yang baik dalam komentar untuk jawaban ini : gunakan os.path.joinuntuk membuat jalur lintas platform. Ini mudah untuk beberapa jalur hardcode yang saya miliki, tetapi kesalahannya tampaknya menunjukkan masalahnya lebih dalam, mungkin bahkan di Qt. Bagaimana saya bisa mengatasi masalah ini di plugin saya tanpa mengubah apa pun?

Pavel V.
sumber

Jawaban:

23

Mungkin QGIS Anda mencoba mengimpor widget dari file .h seperti di c ++.

Silakan buka file .ui Anda dan temukan baris:

<customwidget>
   <class>QgsProjectionSelectionWidget</class>
   <extends>QWidget</extends>
   <header>qgsprojectionselectionwidget.h</header>
  </customwidget>

Kemudian di tag tajuk Anda ubah ke:

<customwidget>
   <class>QgsProjectionSelectionWidget</class>
   <extends>QWidget</extends>
   <header>qgis.gui</header>
  </customwidget>

Ubah tag yang sama untuk semua widget Anda dengan kesalahan (qgsmaplayercombobox dll.).

dmh126
sumber
0

@ dmh126 jawabannya bagus. Terutama, jika Anda bekerja dengan PyQt - pyqgis, Anda harus menulis from qgis._gui import *bukan import QgsProjectionSelectionWidget.

Mustafa Uçar
sumber