Referencing a table using PyQt5 on a custom form in QGIS 3 Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Couldn't destroy QGIS Custom Edit Form FactoriesHow to import PyQt5 in QGIS 2.99?Custom Form in QGISQgsRelationEditorWidget in Custom formNo custom widgets in Qt Designer for QGIS 3QGIS API 3.2 and PyQT5 in Ubuntu Fails: Native Qt signal is not callableCompiling QGIS 3.x (master) on Ubuntu 16.04 with Python3.6 and the latest Qt 5 and PyQt5 familiy modules (PyQt5, sip, qscintilla, pyqtchart)Custom Attributes form in QGIS 3QGIS QComboBox List controls form inputQGIS Compiling 3.6.0 Troubleshooting about PyQt5, SIP, Qscintilla on Ubuntu 18.04 LTS

Stopping real property loss from eroding embankment

How can you insert a "times/divide" symbol similar to the "plus/minus" (±) one?

What would be Julian Assange's expected punishment, on the current English criminal law?

Why don't the Weasley twins use magic outside of school if the Trace can only find the location of spells cast?

Is there a service that would inform me whenever a new direct route is scheduled from a given airport?

How does modal jazz use chord progressions?

Windows 10: How to Lock (not sleep) laptop on lid close?

Stop battery usage [Ubuntu 18]

Is it possible to boil a liquid by just mixing many immiscible liquids together?

Unable to start mainnet node docker container

Did the new image of black hole confirm the general theory of relativity?

Who can trigger ship-wide alerts in Star Trek?

Understanding this description of teleportation

What is the order of Mitzvot in Rambam's Sefer Hamitzvot?

Do working physicists consider Newtonian mechanics to be "falsified"?

Statistical model of ligand substitution

What are the performance impacts of 'functional' Rust?

Complexity of many constant time steps with occasional logarithmic steps

How do I automatically answer y in bash script?

How to politely respond to generic emails requesting a PhD/job in my lab? Without wasting too much time

Is above average number of years spent on PhD considered a red flag in future academia or industry positions?

Training a classifier when some of the features are unknown

Classification of bundles, Postnikov towers, obstruction theory, local coefficients

Simulating Exploding Dice



Referencing a table using PyQt5 on a custom form in QGIS 3



Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
Announcing the arrival of Valued Associate #679: Cesar Manara
Unicorn Meta Zoo #1: Why another podcast?Couldn't destroy QGIS Custom Edit Form FactoriesHow to import PyQt5 in QGIS 2.99?Custom Form in QGISQgsRelationEditorWidget in Custom formNo custom widgets in Qt Designer for QGIS 3QGIS API 3.2 and PyQT5 in Ubuntu Fails: Native Qt signal is not callableCompiling QGIS 3.x (master) on Ubuntu 16.04 with Python3.6 and the latest Qt 5 and PyQt5 familiy modules (PyQt5, sip, qscintilla, pyqtchart)Custom Attributes form in QGIS 3QGIS QComboBox List controls form inputQGIS Compiling 3.6.0 Troubleshooting about PyQt5, SIP, Qscintilla on Ubuntu 18.04 LTS



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1















I am currently trying to add logic to a custom form to key out a habitat code. This is for work using UK Habitat Classification.
It is based on a 5 level hierarchical code to produce a Primary Code. Each level filters the options for the next layer.



What I have so far (I stopped at level 3):



from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


Prime = None
L1Field = None
L2LField = None
L2CField = None
L3LField = None
L3CField = None

def formOpen(dialog,layerid,featureid):
global Prime
Prime = dialog.findChild(QLineEdit,"PRIME_COD")
global L1Field
L1Field = dialog.findChild(QComboBox,"L1")
L1Field.addItems(["","Terrestrial","Freshwater","Marine"])
L1Field.currentIndexChanged.connect( L1Changed )
global L2LField
L2LField = dialog.findChild(QComboBox,"L2_LABEL")
global L2CField
L2CField = dialog.findChild(QLineEdit,"L2_CODE")
L2LField.currentIndexChanged.connect( L2Changed )
global L3LField
L3LField = dialog.findChild(QComboBox,"L3_LABEL")
global L3CField
L3CField = dialog.findChild(QLineEdit,"L3_CODE")
L3LField.currentIndexChanged.connect( L3Changed )


def L1Changed( value ):
L2LField.clear()
L3LField.clear()
if L1Field.currentText() == 'Terrestrial':
L2LField.addItems(["","Cropland","Grassland","Heathland and shrub","Sparsely vegetated land","Urban","Wetland","Woodland and forest"])
elif L1Field.currentText() == 'Freshwater':
L2LField.addItems(["Rivers and lakes"])
elif L1Field.currentText() == 'Marine':
L2LField.addItems(["Marine inlets and transitional waters"])
else:
L2LField.addItems([""])

def L2Changed( value ):
L3LField.clear()
if L2LField.currentText() == 'Grassland':
L2CField.setText( 'g' )
L3LField.addItems(["","Acid grassland","Calcareous grassland","Neutral grassland","Modified grassland"])
elif L2LField.currentText() == 'Woodland and forest':
L2CField.setText( 'w' )
L3LField.addItems(["","Broadleaved mixed and yew woodland","Coniferous woodland"])
elif L2LField.currentText() == 'Heathland and shrub':
L2CField.setText( 'h' )
L3LField.addItems(["","Dwarf shrub heath","Hedgerows","Dense scrub"])
elif L2LField.currentText() == 'Wetland':
L2CField.setText( 'f' )
L3LField.addItems(["","Bog","Fen marsh and swamp"])
elif L2LField.currentText() == 'Cropland':
L2CField.setText( 'c' )
L3LField.addItems(["Arable and horticulture"])
elif L2LField.currentText() == 'Urban':
L2CField.setText( 'u' )
L3LField.addItems(["Built-up areas and gardens"])
elif L2LField.currentText() == 'Sparsely vegetated land':
L2CField.setText( 's' )
L3LField.addItems(["","Inland rock","Supralittoral Rock","Supralittoral Sediment"])
elif L2LField.currentText() == 'Rivers and lakes':
L2CField.setText( 'r' )
L3LField.addItems(["","Standing open water and canals","Rivers and streams"])
elif L2LField.currentText() == 'Marine inlets and transitional waters':
L2CField.setText( 't' )
L3LField.addItems(["","Littoral Rock","Littoral Sediment"])
else:
L2CField.setText( '' )

def L3Changed (value):
if L3LField.currentText() == 'Acid grassland':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Calcareous grassland':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Neutral grassland':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Modified grassland':
L3CField.setText( '4' )
elif L3LField.currentText() == 'Broadleaved mixed and yew woodland':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Coniferous woodland':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Dwarf shrub heath':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Hedgerows':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Dense scrub':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Bog':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Fen marsh and swamp':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Arable and horticulture':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Built-up areas and gardens':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Inland rock':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Supralittoral Rock':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Supralittoral Sediment':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Standing open water and canals':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Rivers and streams':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Littoral Rock':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Littoral Sediment':
L3CField.setText( '2' )
else:
L3CField.setText( '' )


I have made a simple form in Qt Designer to test this. Form



My code works but I feel is cumbersome and could be greatly simplified but I lack the knowledge how. I would like to reference a table with the values to simplify things. I think it needs to be a table rather than lists as the Label field value sets the Code value and the previous level Label controls the drill down function on the Label QComboBox.



Table



Any help or recommendations to improve would be welcome.



N.B. I have not yet written the code to populate the Primary Field but this will be a concatenation of the L0CFields triggered on index change of any of these fields, I just haven't worked out how yet...










share|improve this question






















  • What data format is the table in? Are you wanting to know how to connect and query against it?

    – artwork21
    Apr 10 at 12:15












  • It can be in any format that will work, CSV or DBF is easiest for me. I have looked at panda but not sure if it is right for this application. I need to know how to connect/reference a table so I can bring the values over to populate QComboBoxes and QTextEdit fields live based on values defined in other fields.

    – P Dreyer
    Apr 11 at 11:54

















1















I am currently trying to add logic to a custom form to key out a habitat code. This is for work using UK Habitat Classification.
It is based on a 5 level hierarchical code to produce a Primary Code. Each level filters the options for the next layer.



What I have so far (I stopped at level 3):



from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


Prime = None
L1Field = None
L2LField = None
L2CField = None
L3LField = None
L3CField = None

def formOpen(dialog,layerid,featureid):
global Prime
Prime = dialog.findChild(QLineEdit,"PRIME_COD")
global L1Field
L1Field = dialog.findChild(QComboBox,"L1")
L1Field.addItems(["","Terrestrial","Freshwater","Marine"])
L1Field.currentIndexChanged.connect( L1Changed )
global L2LField
L2LField = dialog.findChild(QComboBox,"L2_LABEL")
global L2CField
L2CField = dialog.findChild(QLineEdit,"L2_CODE")
L2LField.currentIndexChanged.connect( L2Changed )
global L3LField
L3LField = dialog.findChild(QComboBox,"L3_LABEL")
global L3CField
L3CField = dialog.findChild(QLineEdit,"L3_CODE")
L3LField.currentIndexChanged.connect( L3Changed )


def L1Changed( value ):
L2LField.clear()
L3LField.clear()
if L1Field.currentText() == 'Terrestrial':
L2LField.addItems(["","Cropland","Grassland","Heathland and shrub","Sparsely vegetated land","Urban","Wetland","Woodland and forest"])
elif L1Field.currentText() == 'Freshwater':
L2LField.addItems(["Rivers and lakes"])
elif L1Field.currentText() == 'Marine':
L2LField.addItems(["Marine inlets and transitional waters"])
else:
L2LField.addItems([""])

def L2Changed( value ):
L3LField.clear()
if L2LField.currentText() == 'Grassland':
L2CField.setText( 'g' )
L3LField.addItems(["","Acid grassland","Calcareous grassland","Neutral grassland","Modified grassland"])
elif L2LField.currentText() == 'Woodland and forest':
L2CField.setText( 'w' )
L3LField.addItems(["","Broadleaved mixed and yew woodland","Coniferous woodland"])
elif L2LField.currentText() == 'Heathland and shrub':
L2CField.setText( 'h' )
L3LField.addItems(["","Dwarf shrub heath","Hedgerows","Dense scrub"])
elif L2LField.currentText() == 'Wetland':
L2CField.setText( 'f' )
L3LField.addItems(["","Bog","Fen marsh and swamp"])
elif L2LField.currentText() == 'Cropland':
L2CField.setText( 'c' )
L3LField.addItems(["Arable and horticulture"])
elif L2LField.currentText() == 'Urban':
L2CField.setText( 'u' )
L3LField.addItems(["Built-up areas and gardens"])
elif L2LField.currentText() == 'Sparsely vegetated land':
L2CField.setText( 's' )
L3LField.addItems(["","Inland rock","Supralittoral Rock","Supralittoral Sediment"])
elif L2LField.currentText() == 'Rivers and lakes':
L2CField.setText( 'r' )
L3LField.addItems(["","Standing open water and canals","Rivers and streams"])
elif L2LField.currentText() == 'Marine inlets and transitional waters':
L2CField.setText( 't' )
L3LField.addItems(["","Littoral Rock","Littoral Sediment"])
else:
L2CField.setText( '' )

def L3Changed (value):
if L3LField.currentText() == 'Acid grassland':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Calcareous grassland':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Neutral grassland':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Modified grassland':
L3CField.setText( '4' )
elif L3LField.currentText() == 'Broadleaved mixed and yew woodland':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Coniferous woodland':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Dwarf shrub heath':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Hedgerows':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Dense scrub':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Bog':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Fen marsh and swamp':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Arable and horticulture':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Built-up areas and gardens':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Inland rock':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Supralittoral Rock':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Supralittoral Sediment':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Standing open water and canals':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Rivers and streams':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Littoral Rock':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Littoral Sediment':
L3CField.setText( '2' )
else:
L3CField.setText( '' )


I have made a simple form in Qt Designer to test this. Form



My code works but I feel is cumbersome and could be greatly simplified but I lack the knowledge how. I would like to reference a table with the values to simplify things. I think it needs to be a table rather than lists as the Label field value sets the Code value and the previous level Label controls the drill down function on the Label QComboBox.



Table



Any help or recommendations to improve would be welcome.



N.B. I have not yet written the code to populate the Primary Field but this will be a concatenation of the L0CFields triggered on index change of any of these fields, I just haven't worked out how yet...










share|improve this question






















  • What data format is the table in? Are you wanting to know how to connect and query against it?

    – artwork21
    Apr 10 at 12:15












  • It can be in any format that will work, CSV or DBF is easiest for me. I have looked at panda but not sure if it is right for this application. I need to know how to connect/reference a table so I can bring the values over to populate QComboBoxes and QTextEdit fields live based on values defined in other fields.

    – P Dreyer
    Apr 11 at 11:54













1












1








1








I am currently trying to add logic to a custom form to key out a habitat code. This is for work using UK Habitat Classification.
It is based on a 5 level hierarchical code to produce a Primary Code. Each level filters the options for the next layer.



What I have so far (I stopped at level 3):



from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


Prime = None
L1Field = None
L2LField = None
L2CField = None
L3LField = None
L3CField = None

def formOpen(dialog,layerid,featureid):
global Prime
Prime = dialog.findChild(QLineEdit,"PRIME_COD")
global L1Field
L1Field = dialog.findChild(QComboBox,"L1")
L1Field.addItems(["","Terrestrial","Freshwater","Marine"])
L1Field.currentIndexChanged.connect( L1Changed )
global L2LField
L2LField = dialog.findChild(QComboBox,"L2_LABEL")
global L2CField
L2CField = dialog.findChild(QLineEdit,"L2_CODE")
L2LField.currentIndexChanged.connect( L2Changed )
global L3LField
L3LField = dialog.findChild(QComboBox,"L3_LABEL")
global L3CField
L3CField = dialog.findChild(QLineEdit,"L3_CODE")
L3LField.currentIndexChanged.connect( L3Changed )


def L1Changed( value ):
L2LField.clear()
L3LField.clear()
if L1Field.currentText() == 'Terrestrial':
L2LField.addItems(["","Cropland","Grassland","Heathland and shrub","Sparsely vegetated land","Urban","Wetland","Woodland and forest"])
elif L1Field.currentText() == 'Freshwater':
L2LField.addItems(["Rivers and lakes"])
elif L1Field.currentText() == 'Marine':
L2LField.addItems(["Marine inlets and transitional waters"])
else:
L2LField.addItems([""])

def L2Changed( value ):
L3LField.clear()
if L2LField.currentText() == 'Grassland':
L2CField.setText( 'g' )
L3LField.addItems(["","Acid grassland","Calcareous grassland","Neutral grassland","Modified grassland"])
elif L2LField.currentText() == 'Woodland and forest':
L2CField.setText( 'w' )
L3LField.addItems(["","Broadleaved mixed and yew woodland","Coniferous woodland"])
elif L2LField.currentText() == 'Heathland and shrub':
L2CField.setText( 'h' )
L3LField.addItems(["","Dwarf shrub heath","Hedgerows","Dense scrub"])
elif L2LField.currentText() == 'Wetland':
L2CField.setText( 'f' )
L3LField.addItems(["","Bog","Fen marsh and swamp"])
elif L2LField.currentText() == 'Cropland':
L2CField.setText( 'c' )
L3LField.addItems(["Arable and horticulture"])
elif L2LField.currentText() == 'Urban':
L2CField.setText( 'u' )
L3LField.addItems(["Built-up areas and gardens"])
elif L2LField.currentText() == 'Sparsely vegetated land':
L2CField.setText( 's' )
L3LField.addItems(["","Inland rock","Supralittoral Rock","Supralittoral Sediment"])
elif L2LField.currentText() == 'Rivers and lakes':
L2CField.setText( 'r' )
L3LField.addItems(["","Standing open water and canals","Rivers and streams"])
elif L2LField.currentText() == 'Marine inlets and transitional waters':
L2CField.setText( 't' )
L3LField.addItems(["","Littoral Rock","Littoral Sediment"])
else:
L2CField.setText( '' )

def L3Changed (value):
if L3LField.currentText() == 'Acid grassland':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Calcareous grassland':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Neutral grassland':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Modified grassland':
L3CField.setText( '4' )
elif L3LField.currentText() == 'Broadleaved mixed and yew woodland':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Coniferous woodland':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Dwarf shrub heath':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Hedgerows':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Dense scrub':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Bog':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Fen marsh and swamp':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Arable and horticulture':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Built-up areas and gardens':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Inland rock':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Supralittoral Rock':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Supralittoral Sediment':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Standing open water and canals':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Rivers and streams':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Littoral Rock':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Littoral Sediment':
L3CField.setText( '2' )
else:
L3CField.setText( '' )


I have made a simple form in Qt Designer to test this. Form



My code works but I feel is cumbersome and could be greatly simplified but I lack the knowledge how. I would like to reference a table with the values to simplify things. I think it needs to be a table rather than lists as the Label field value sets the Code value and the previous level Label controls the drill down function on the Label QComboBox.



Table



Any help or recommendations to improve would be welcome.



N.B. I have not yet written the code to populate the Primary Field but this will be a concatenation of the L0CFields triggered on index change of any of these fields, I just haven't worked out how yet...










share|improve this question














I am currently trying to add logic to a custom form to key out a habitat code. This is for work using UK Habitat Classification.
It is based on a 5 level hierarchical code to produce a Primary Code. Each level filters the options for the next layer.



What I have so far (I stopped at level 3):



from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


Prime = None
L1Field = None
L2LField = None
L2CField = None
L3LField = None
L3CField = None

def formOpen(dialog,layerid,featureid):
global Prime
Prime = dialog.findChild(QLineEdit,"PRIME_COD")
global L1Field
L1Field = dialog.findChild(QComboBox,"L1")
L1Field.addItems(["","Terrestrial","Freshwater","Marine"])
L1Field.currentIndexChanged.connect( L1Changed )
global L2LField
L2LField = dialog.findChild(QComboBox,"L2_LABEL")
global L2CField
L2CField = dialog.findChild(QLineEdit,"L2_CODE")
L2LField.currentIndexChanged.connect( L2Changed )
global L3LField
L3LField = dialog.findChild(QComboBox,"L3_LABEL")
global L3CField
L3CField = dialog.findChild(QLineEdit,"L3_CODE")
L3LField.currentIndexChanged.connect( L3Changed )


def L1Changed( value ):
L2LField.clear()
L3LField.clear()
if L1Field.currentText() == 'Terrestrial':
L2LField.addItems(["","Cropland","Grassland","Heathland and shrub","Sparsely vegetated land","Urban","Wetland","Woodland and forest"])
elif L1Field.currentText() == 'Freshwater':
L2LField.addItems(["Rivers and lakes"])
elif L1Field.currentText() == 'Marine':
L2LField.addItems(["Marine inlets and transitional waters"])
else:
L2LField.addItems([""])

def L2Changed( value ):
L3LField.clear()
if L2LField.currentText() == 'Grassland':
L2CField.setText( 'g' )
L3LField.addItems(["","Acid grassland","Calcareous grassland","Neutral grassland","Modified grassland"])
elif L2LField.currentText() == 'Woodland and forest':
L2CField.setText( 'w' )
L3LField.addItems(["","Broadleaved mixed and yew woodland","Coniferous woodland"])
elif L2LField.currentText() == 'Heathland and shrub':
L2CField.setText( 'h' )
L3LField.addItems(["","Dwarf shrub heath","Hedgerows","Dense scrub"])
elif L2LField.currentText() == 'Wetland':
L2CField.setText( 'f' )
L3LField.addItems(["","Bog","Fen marsh and swamp"])
elif L2LField.currentText() == 'Cropland':
L2CField.setText( 'c' )
L3LField.addItems(["Arable and horticulture"])
elif L2LField.currentText() == 'Urban':
L2CField.setText( 'u' )
L3LField.addItems(["Built-up areas and gardens"])
elif L2LField.currentText() == 'Sparsely vegetated land':
L2CField.setText( 's' )
L3LField.addItems(["","Inland rock","Supralittoral Rock","Supralittoral Sediment"])
elif L2LField.currentText() == 'Rivers and lakes':
L2CField.setText( 'r' )
L3LField.addItems(["","Standing open water and canals","Rivers and streams"])
elif L2LField.currentText() == 'Marine inlets and transitional waters':
L2CField.setText( 't' )
L3LField.addItems(["","Littoral Rock","Littoral Sediment"])
else:
L2CField.setText( '' )

def L3Changed (value):
if L3LField.currentText() == 'Acid grassland':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Calcareous grassland':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Neutral grassland':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Modified grassland':
L3CField.setText( '4' )
elif L3LField.currentText() == 'Broadleaved mixed and yew woodland':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Coniferous woodland':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Dwarf shrub heath':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Hedgerows':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Dense scrub':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Bog':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Fen marsh and swamp':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Arable and horticulture':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Built-up areas and gardens':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Inland rock':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Supralittoral Rock':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Supralittoral Sediment':
L3CField.setText( '3' )
elif L3LField.currentText() == 'Standing open water and canals':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Rivers and streams':
L3CField.setText( '2' )
elif L3LField.currentText() == 'Littoral Rock':
L3CField.setText( '1' )
elif L3LField.currentText() == 'Littoral Sediment':
L3CField.setText( '2' )
else:
L3CField.setText( '' )


I have made a simple form in Qt Designer to test this. Form



My code works but I feel is cumbersome and could be greatly simplified but I lack the knowledge how. I would like to reference a table with the values to simplify things. I think it needs to be a table rather than lists as the Label field value sets the Code value and the previous level Label controls the drill down function on the Label QComboBox.



Table



Any help or recommendations to improve would be welcome.



N.B. I have not yet written the code to populate the Primary Field but this will be a concatenation of the L0CFields triggered on index change of any of these fields, I just haven't worked out how yet...







pyqgis qgis-3 pyqt5 qcomobox






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Apr 8 at 16:09









P DreyerP Dreyer

706




706












  • What data format is the table in? Are you wanting to know how to connect and query against it?

    – artwork21
    Apr 10 at 12:15












  • It can be in any format that will work, CSV or DBF is easiest for me. I have looked at panda but not sure if it is right for this application. I need to know how to connect/reference a table so I can bring the values over to populate QComboBoxes and QTextEdit fields live based on values defined in other fields.

    – P Dreyer
    Apr 11 at 11:54

















  • What data format is the table in? Are you wanting to know how to connect and query against it?

    – artwork21
    Apr 10 at 12:15












  • It can be in any format that will work, CSV or DBF is easiest for me. I have looked at panda but not sure if it is right for this application. I need to know how to connect/reference a table so I can bring the values over to populate QComboBoxes and QTextEdit fields live based on values defined in other fields.

    – P Dreyer
    Apr 11 at 11:54
















What data format is the table in? Are you wanting to know how to connect and query against it?

– artwork21
Apr 10 at 12:15






What data format is the table in? Are you wanting to know how to connect and query against it?

– artwork21
Apr 10 at 12:15














It can be in any format that will work, CSV or DBF is easiest for me. I have looked at panda but not sure if it is right for this application. I need to know how to connect/reference a table so I can bring the values over to populate QComboBoxes and QTextEdit fields live based on values defined in other fields.

– P Dreyer
Apr 11 at 11:54





It can be in any format that will work, CSV or DBF is easiest for me. I have looked at panda but not sure if it is right for this application. I need to know how to connect/reference a table so I can bring the values over to populate QComboBoxes and QTextEdit fields live based on values defined in other fields.

– P Dreyer
Apr 11 at 11:54










1 Answer
1






active

oldest

votes


















1














To connect to a .csv using pyqgis you may use this method:



table = QgsVectorLayer('C:/Temp/Book1.csv', "table", "ogr")


To cursor through the records and columns use this method:



for record in table.getFeatures():
print('L3_LABLE = , 'L3CODE = '.format(record['L3_LABLE'], record['L3_CODE']))





share|improve this answer























  • Thank you, I'm still not quite there with it yet but that's no doubt down to my total inexperience with scripting. I will plug away at it when I have time. Does the QgsVectorLayer address have to be absolute or can it be relative to the project file?

    – P Dreyer
    Apr 11 at 15:19












Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "79"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f318145%2freferencing-a-table-using-pyqt5-on-a-custom-form-in-qgis-3%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














To connect to a .csv using pyqgis you may use this method:



table = QgsVectorLayer('C:/Temp/Book1.csv', "table", "ogr")


To cursor through the records and columns use this method:



for record in table.getFeatures():
print('L3_LABLE = , 'L3CODE = '.format(record['L3_LABLE'], record['L3_CODE']))





share|improve this answer























  • Thank you, I'm still not quite there with it yet but that's no doubt down to my total inexperience with scripting. I will plug away at it when I have time. Does the QgsVectorLayer address have to be absolute or can it be relative to the project file?

    – P Dreyer
    Apr 11 at 15:19
















1














To connect to a .csv using pyqgis you may use this method:



table = QgsVectorLayer('C:/Temp/Book1.csv', "table", "ogr")


To cursor through the records and columns use this method:



for record in table.getFeatures():
print('L3_LABLE = , 'L3CODE = '.format(record['L3_LABLE'], record['L3_CODE']))





share|improve this answer























  • Thank you, I'm still not quite there with it yet but that's no doubt down to my total inexperience with scripting. I will plug away at it when I have time. Does the QgsVectorLayer address have to be absolute or can it be relative to the project file?

    – P Dreyer
    Apr 11 at 15:19














1












1








1







To connect to a .csv using pyqgis you may use this method:



table = QgsVectorLayer('C:/Temp/Book1.csv', "table", "ogr")


To cursor through the records and columns use this method:



for record in table.getFeatures():
print('L3_LABLE = , 'L3CODE = '.format(record['L3_LABLE'], record['L3_CODE']))





share|improve this answer













To connect to a .csv using pyqgis you may use this method:



table = QgsVectorLayer('C:/Temp/Book1.csv', "table", "ogr")


To cursor through the records and columns use this method:



for record in table.getFeatures():
print('L3_LABLE = , 'L3CODE = '.format(record['L3_LABLE'], record['L3_CODE']))






share|improve this answer












share|improve this answer



share|improve this answer










answered Apr 11 at 12:21









artwork21artwork21

31.1k555120




31.1k555120












  • Thank you, I'm still not quite there with it yet but that's no doubt down to my total inexperience with scripting. I will plug away at it when I have time. Does the QgsVectorLayer address have to be absolute or can it be relative to the project file?

    – P Dreyer
    Apr 11 at 15:19


















  • Thank you, I'm still not quite there with it yet but that's no doubt down to my total inexperience with scripting. I will plug away at it when I have time. Does the QgsVectorLayer address have to be absolute or can it be relative to the project file?

    – P Dreyer
    Apr 11 at 15:19

















Thank you, I'm still not quite there with it yet but that's no doubt down to my total inexperience with scripting. I will plug away at it when I have time. Does the QgsVectorLayer address have to be absolute or can it be relative to the project file?

– P Dreyer
Apr 11 at 15:19






Thank you, I'm still not quite there with it yet but that's no doubt down to my total inexperience with scripting. I will plug away at it when I have time. Does the QgsVectorLayer address have to be absolute or can it be relative to the project file?

– P Dreyer
Apr 11 at 15:19


















draft saved

draft discarded
















































Thanks for contributing an answer to Geographic Information Systems Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f318145%2freferencing-a-table-using-pyqt5-on-a-custom-form-in-qgis-3%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

រឿង រ៉ូមេអូ និង ហ្ស៊ុយលីយេ សង្ខេបរឿង តួអង្គ បញ្ជីណែនាំ

Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given

QGIS export composer to PDF scale the map [closed] Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Print Composer QGIS 2.6, how to export image?QGIS 2.8.1 print composer won't export all OpenCycleMap base layer tilesSave Print/Map QGIS composer view as PNG/PDF using Python (without changing anything in visible layout)?Export QGIS Print Composer PDF with searchable text labelsQGIS Print Composer does not change from landscape to portrait orientation?How can I avoid map size and scale changes in print composer?Fuzzy PDF export in QGIS running on macSierra OSExport the legend into its 100% size using Print ComposerScale-dependent rendering in QGIS PDF output