QGIS फ़ील्ड में डिफ़ॉल्ट मान सेट करना


12

मैं एक परत के क्षेत्र में एक डिफ़ॉल्ट मान जोड़ना चाहूंगा। मेरा मतलब है कि हर बार एक नई सुविधा निर्मित होने पर, वह फ़ील्ड अपने आप डिफ़ॉल्ट मान से भर जाएगी।

मेरे मामले में डिफ़ॉल्ट मान @project_filename वैरिएबल (प्रोजेक्ट का फ़ाइल नाम) होगा।

मुझे यह कार्यक्षमता कहीं नहीं मिल रही है।

सादर,

जवाबों:


8

क्यूजीआईएस 2.18 के बाद से, परत गुण / क्षेत्र गुणों पर जाएं और @project_filenameडिफ़ॉल्ट मान के रूप में एक अभिव्यक्ति ( इस मामले में) सेट करें।

अभिव्यक्ति आधारित डिफ़ॉल्ट मान

https://www.qgis.org/en/site/forusers/visualchangelog218/index.html#feature-client-side-default-field-values


1
C ++ API में अगर मुझसे गलती नहीं हुई है तो क्लास QgsDefaultValue है इसे प्रोग्रामेटिक रूप से करने के लिए। क्या उस के लिए अजगर विकल्प है?
शिखा-कुन

यदि आप इसे एक नया प्रश्न पूछते हैं, तो मुझे इसका उत्तर देने में खुशी होगी। बस मुझे एक अनुस्मारक यहाँ भेजें;)
मथायस कुह्न


10

आप एक फ़ंक्शन को परिभाषित कर सकते हैं जो प्रोजेक्ट फ़ाइलनाम को एक विशेषता के रूप में जोड़ता है और इस फ़ंक्शन को उस ईवेंट से जोड़ता है जो सुविधाओं को जोड़ता है। आप निम्न कोड का उपयोग कर सकते हैं, आपके द्वारा चुने गए (मैंने उपयोग किए गए Name) फ़ील्ड का नाम बदलकर उसे पायथन कंसोल में पेस्ट कर सकते हैं । अब जब भी आप कोई नई सुविधा जोड़ते हैं, तो फ़ील्ड वर्तमान प्रोजेक्ट नाम के साथ आबाद हो जाएगी:

import os

# Get project name
project = QgsProject.instance()
project_name = os.path.basename(project.fileName())

# Set active layer
layer = qgis.utils.iface.activeLayer()

# Define function to select added feature and add attribute to field "Name"
def update(featureAdded):
    idx = layer.fieldNameIndex('Name')
    layer.changeAttributeValue(featureAdded, idx, project_name)

# Connect "featureAdded" event to "select" function
layer.featureAdded.connect(update)

परिणाम


1
क्या आपको उस स्क्रिप्ट को चलाने की ज़रूरत है जो आप परत को संपादित करते हैं या स्क्रिप्ट qgis प्रोजेक्ट में संग्रहीत रहती है?
घाटी

1
@Vale - आप स्क्रिप्ट को एक मैक्रो के रूप में सहेज सकते हैं जिसे QGIS प्रोजेक्ट में संग्रहीत किया जाएगा। मैं इस पोस्ट को शामिल करने के लिए संपादित करूंगा =)
जोसेफ

1
आपको जोसेफ सुविधाओं का चयन करने की आवश्यकता क्यों है?
जर्मेन कैरिलो

3
मुझे नहीं लगता कि कोई अन्य प्रश्न पोस्ट करने की आवश्यकता है, क्योंकि बहुत अधिक ओवरलैप होगा। तुम वास्तव में करीब हो। मैं आपको सुझाव दूंगा कि आप सुविधाओं का चयन करने से बचें। SIGNAL featureAddedट्रिगर होने पर आपको पैरामीटर के रूप में जो मिलता है, वह वास्तव में एक फीचर आईडी है। और आपको कॉल करने के लिए बस इतना ही चाहिए changeAttributeValue। में updateसमारोह तुम सिर्फ 2 लाइनों (अपने चर नाम का उपयोग करके) की आवश्यकता होगी: idx = layer.fieldNameIndex('Name')और layer.changeAttributeValue(featureAdded, idx, project_name)
जर्मेन कारिलो 14

1
@ जर्मेनक्रिल्लो - यह काम किया, वाह इतना सरल! आपके महान सुझाव के लिए धन्यवाद दोस्त! मैं रोज कुछ सीखता हूं))
जोसफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.