Více

Tlačítko pro spuštění skriptu Python na vlastním formuláři Otevřete QGIS


Jsem velmi nový v QGIS a Pythonu (i když před lety měl nějaké zkušenosti s programováním v C ++), ale v současné době se potýkám s poměrně velkým projektem katalogizujícím hřbitovní pozemky.

V současné době mám vlastní formulář sloužící k pořizování fotografií a křížových odkazů na stávající data, pořizování fotografií a propojování s fyzicky zkoumanými grafy.

Doufám, že udělám pár kroků k pořízení fotografie a propojení s existujícím záznamem. Aktuálně se stane, že se uživatel přepne do aplikace fotoaparátu, pořídí fotografii a poté se vrátí do QGIS, kde soubor vyhledá a propojí se záznamem ve vlastním formuláři.

Chtěl bych udělat tlačítko ve své vlastní podobě, které při výběru spustí aplikaci fotoaparátu a po zavření automaticky vyhledá nejnovější soubor v adresáři kamery. To se mi do určité míry podařilo dosáhnout v konzole pythonu následujícím způsobem:

import os import subprocess subprocess.call (['notepad.exe']) path = "C:  temp " file_list = os.listdir (cesta) dated_files = [(os.path.getctime (cesta + fn), os.path.basename (cesta + fn)) pro fn v seznamu souborů] dated_files.sort () dated_files.reverse () newest = dated_files [0] [1] return_string = cesta + nejnovější

Proměnná volání a cesty notepad.exe bude zjevně jednou aktualizována v počítači pro sběr dat, ale zdá se, že zatím funguje pro testování ...

Nyní bojuji s tím, jak by to bylo vloženo do skriptu pro „funkci Python Init“ v QGIS, aby se spustilo po stisknutí tlačítka a poté upravilo hodnotu ve formuláři.


Zde je můj ukázkový kód. Chcete -li použít kód, který jsem připravilQDialogv QtDesigner s jednoduchýmUpravitpojmenované „pole“ a aTlačítko QPushButtons názvem „push“ - vform_open ()funkce musíte najít tyto komponenty. Poté je kliknutý signál tlačítka připojen k funkci. Zkuste zadat kód ve funkcicheck_and_set_field_value ():

from PyQt4.QtGui import QLineEdit, QPushButton form = None field = None def form_open (my_dialog, layer_id, feature_id): global form global field form = my_dialog field = form.findChild (QLineEdit, "field") push = form.findChild (QPushButton , "push") push.clicked.connect (check_and_set_field_value) def check_and_set_field_value (): # Váš kód jde sem… # Příklad návratové hodnoty: return_value = 'test', pokud return_value není None: field.setText (return_value)


Podívejte se na video: Python in QGIS. Lesson 0. Vector Layer; Selection. (Říjen 2021).