Last active
March 22, 2023 11:40
-
-
Save SrNetoChan/6e4bec315749e3d65e3b7c91bb0a98ad to your computer and use it in GitHub Desktop.
Alterar formularios de Camadas recart para serem mais faceis de editar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def field_readonly(layer, fieldname, option = True): | |
''' | |
Tornar o campo de uma camada vectorial nao editavel | |
''' | |
if layer.type() != QgsMapLayer.VectorLayer: | |
return | |
fields = layer.fields() | |
field_idx = fields.indexOf(fieldname) | |
if field_idx >= 0: | |
form_config = layer.editFormConfig() | |
form_config.setReadOnly(field_idx, option) | |
layer.setEditFormConfig(form_config) | |
return | |
def field_to_datetime(layer, fieldname): | |
''' | |
Configurar campo do tipo data de uma camada vectorial como DateTime | |
Define um default now() no campo | |
''' | |
if layer.type() != QgsMapLayer.VectorLayer: | |
return | |
config = {'allow_null': True, | |
'calendar_popup': True, | |
'display_format': 'yyyy-MM-dd HH:mm:ss', | |
'field_format': 'yyyy-MM-dd HH:mm:ss', | |
'field_iso_format': False} | |
type = 'DateTime' | |
fields = layer.fields() | |
field_idx = fields.indexOf(fieldname) | |
if field_idx >= 0: | |
widget_setup = QgsEditorWidgetSetup(type,config) | |
layer.setEditorWidgetSetup(field_idx, widget_setup) | |
layer.setDefaultValueDefinition(field_idx, QgsDefaultValue('now()')) | |
return | |
def field_to_value_relation(layer): | |
''' | |
Configura os campos de uma camada vectorial com widget value relation | |
usando camadas auxiliar com nome semelhante | |
''' | |
if layer.type() != QgsMapLayer.VectorLayer: | |
return | |
fields = layer.fields() | |
pattern = re.compile(r'^valor_') | |
fields_valor = [field for field in fields if pattern.match(field.name())] | |
if len(fields_valor) > 0: | |
config = {'AllowMulti': False, | |
'AllowNull': True, | |
'FilterExpression': '', | |
'Key': 'identificador', | |
'Layer': '', | |
'NofColumns': 1, | |
'OrderByValue': False, | |
'UseCompleter': False, | |
'Value': 'descricao'} | |
for field in fields_valor: | |
field_idx = fields.indexOf(field.name()) | |
if field_idx >= 0: | |
print(field) | |
try: | |
target_layer = QgsProject.instance().mapLayersByName(field.name())[0] | |
config['Layer'] = target_layer.id() | |
widget_setup = QgsEditorWidgetSetup('ValueRelation',config) | |
layer.setEditorWidgetSetup(field_idx, widget_setup) | |
except: | |
pass | |
else: | |
return False | |
else: | |
return False | |
return True | |
project = QgsProject.instance() | |
layers = project.mapLayers() | |
for layer in layers.values(): | |
field_readonly(layer,'identificador') | |
field_readonly(layer,'fim_objecto') | |
field_to_datetime(layer,'inicio_objeto') | |
field_to_value_relation(layer) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment