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

Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221