[Qgis-user] QCompleter in QGIS form

Matthias Kuhn matthias.kuhn at gmx.ch
Sun Mar 29 10:55:32 PDT 2015


Hi Stefan,

I had some spare time on the Sunday evening train. So I have just added
this possibility to the ValueRelation widget. You can now choose the
option "Use Completer" there.
The query is still run every time the form is opened at the moment.
There is actually a caching mechanism for the value relation widget
prepared, so it should be possible to make use of that and initialize
the cache only once.
But that will have to wait until I have some spare time again or one may
speed up the process by funding this or tackling the issue if coding
skills are available (for the last option, please get in touch first,
there are a couple of different approaches to doing this),

Testing is appreciated.
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/400666e4/attachment.html>


More information about the Qgis-user mailing list