[Qgis-user] QCompleter in QGIS form

Matthias Kuhn matthias.kuhn at gmx.ch
Sun Mar 29 10:56:53 PDT 2015


PS:

1) couldn't reproduce the "global name is not defined" error... You
script works here with .ui and autogenerated forms.
2) You may use a global variable to cache your completer (or its values)

Best,
Matthias



On 03/28/2015 08:32 PM, Blumentrath, Stefan wrote:
>
> Dear all,
>
>  
>
> Thanks to Nathan`s excellent example here:
>
> http://nathanw.net/2011/09/05/qgis-tips-custom-feature-forms-with-python-logic/
>
> I managed to implement a simple QCompleter for a LineEdit in my form
> where the completer items are being fetched from DB (see init function
> code at the end of my mail).
>
>  
>
> This is very, very promising stuff which comes in quite handy for
> entering species names (from an official list of (thousands of)
> species names in my case)!
>
>  
>
> Yet there are two things I am struggling with:
>
> 1) Would it be possible to use this QCompleter solution to an
> autogenerated form? The auto generated forms are more than good enough
> for most of my use-cases. When I tried the Init function on an
> autogenerated form I got “NameError: global name 'TextEdit' is not
> defined”… Any ideas how to fix that?
>
>  
>
> 2) It seems to me that the query - which is used to fill the
> QCompleter - is executed each time the form is opened. Would it be
> possible to avoid this, I mean that the query is only run once (e.g.
> when I open the project)? I hoped this could speed up the start of the
> form (even if the query gets cached in PostgreSQL)…
>
> Many thanks in advance for helping.
>
>  
>
> Kind regards,
>
> Stefan
>
>  
>
> P.S.: Next thing I will have to do is understand SIGNALS and SLOTS so
> I can adjust the completer content depending on other data entered in
> the form (e.g. filter species by kingdom or known occurrence in a
> country (here Norway)) …
>
>  
>
> P.P.S.: My form_init.py looks like this:
>
>  
>
> from PyQt4.QtCore import *
>
> from PyQt4.QtGui import *
>
> from PyQt4.QtSql import *
>
> import psycopg2
>
> nameField = None
>
> myDialog = None
>
>  
>
> def formOpen(dialog,layerid,featureid):
>
>     global myDialog
>
>     myDialog = dialog
>
>     global nameField
>
>     nameField = dialog.findChild(QLineEdit,"latinsk_navn")
>
>    
>
>     #Initiate completer
>
>     completer = QCompleter()
>
>     nameField.setCompleter(completer)
>
>    
>
>     #Fetch data from DB to fill completer
>
>     conn = psycopg2.connect("dbname='MYDB' user='MYUSERNAME'
> host='MYHOST' password='MYPASSWD'")
>
>     cur = conn.cursor()
>
>     cur.execute("""SELECT scientificname FROM kls.l_artsliste WHERE
> finnesinorge = 'Ja'""")
>
>     completition_items = []
>
>     for row in cur.fetchall():
>
>         completition_items.append(row[0])
>
>  
>
>                #Add data to Qt Model / QCompleter
>
>                model = QStringListModel()
>
>     model.setStringList(completition_items)
>
>     completer.setModel(model)
>
>
>
> _______________________________________________
> Qgis-user mailing list
> Qgis-user at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/qgis-user

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20150329/90a70d60/attachment.html>


More information about the Qgis-user mailing list