Daha çox

Xüsusi Form Açıq QGIS üzərində Python Script işlətmək üçün düymə


QGIS və Python üçün çox yeniyəm (illər əvvəl C ++ ilə bəzi proqramlaşdırma təcrübəsi olsa da), amma hazırda qəbiristanlıq sahələrini kataloqlaşdıran kifayət qədər böyük bir layihə ilə məşğul oluram.

Hal -hazırda fotoşəkil çəkmək və mövcud məlumatlara istinad etmək, fotoşəkil çəkmək və fiziki olaraq araşdırılan sahələrlə əlaqələndirmək üçün istifadə olunan xüsusi bir formam var.

Etmək istədiyim şey, bir fotoşəkil çəkmək və mövcud bir qeydlə əlaqələndirmək üçün bir neçə addım atmaqdır. Hal -hazırda baş verənlər, istifadəçi kamera tətbiqinə keçir, fotoşəkil çəkir və sonra yenidən QGIS -ə daxil olaraq faylı axtarıb xüsusi formada qeydə bağlayır.

Etmək istədiyim şey, xüsusi formada bir düyməyə sahib olmaqdır ki, seçildikdə kamera tətbiqini işə salır və bir dəfə bağlandıqda avtomatik olaraq kamera qovluğunda ən yeni faylı axtarır. Bunu müəyyən dərəcədə python konsolunda aşağıdakılarla əldə edə bildim:

id id alt işləmə subprocess.call (['notepad.exe']) yol = "C:  temp " file_list = os.listdir (yol) tarihli_files = [(os.path.getctime (yol + fn), os.path.basename (yol + fn)) fn in file_list] tarixli_files.sort () tarihli_files.reverse () ən yeni = tarixli_files [0] [1] return_string = yol + ən yeni

Aydındır ki, notepad.exe çağırışı və yol dəyişənləri məlumat toplama kompüterində bir dəfə yenilənəcək, lakin bu, indiyə qədər sınaq üçün işləyir ...

İndi bunun QGIS -də "Python Init Function" üçün skriptə necə qoyulacağı ilə mübarizə aparıram ki, bir düymə qutusuna basıldıqda işləsin və sonra forma daxilində dəyəri dəyişdirsin.


İşdə mənim nümunə kodum. Hazırladığım kodu istifadə etmək üçün aQDialogQtDesigner -də sadə bir şəkildəQLineEdit"sahə" və aQPushButton"push" adlanır - İçərisindəform_açmaq ()Bu komponentləri tapmalısınız. Bundan sonra düyməni basan siqnal funksiyaya qoşulur. Kodunuzu funksiyaya daxil etməyə çalışıncheck_and_set_field_value ():

PyQt4.QtGui idxalından QLineEdit, QPushButton formu = Heç bir sahə = Yoxdur def form_open (my_dialog, layer_id, feature_id): qlobal forma qlobal sahə formu = my_dialog sahəsi = form.findChild (QLineEdit, "sahə") push = form.findButton (QPushButton) , "push") push.clicked.connect (check_and_set_field_value) def check_and_set_field_value (): # Kodunuz bura gedir ... # Geri qaytarma dəyəri yoxdursa, return_value = 'test' nümunəsi: field.setText (return_value)


Videoya baxın: Use QGIS to Clip Raster Layer (Sentyabr 2021).