banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 19 March 2014 17:36

Brice GAL
Participant occasionnel
Lieu: SYANE
Date d'inscription: 6 Sep 2005
Messages: 42
Site web

QGIS / QT Creator : Boutons de case à cocher liés l'un à l'autre

Bonjour,

je prépare un formulaire de saisie pour QGis via QTCreator.
Dans ce formulaire je souhaite utiliser des cases à cocher. Par défaut, chacune est associée à un champ de la table de données.
Je voudrais pouvoir lier deux cases à cocher, correspondant chacune à un état qui serait stocké dans un seul et même champ de la BD, partant du principe qu'une seule case sur les deux peut être cochée....

Cela revient à cocher une case sur les deux pour stocker dans un seul champs la valeur de champs que l'on associe à l'un ou l'autre bouton ...
Quelqu'un a t il une piste?

Merci d'avance pour vos retours.

Brice GAL
SYANE


B. GAL
Resp SI / SIG / Informatique
SYANE

Hors ligne

 

#2 Thu 20 March 2014 10:26

CGuillaume
Participant actif
Lieu: Annecy
Date d'inscription: 3 Aug 2011
Messages: 59

Re: QGIS / QT Creator : Boutons de case à cocher liés l'un à l'autre

Bonjour,

A ma connaissance ce n'est pas possible "simplement" avec un formulaire QT. Il faut en plus lier une fonction Python au formulaire à l'aide des Propriétés de la couche / Onglet "Champs" / Python Init Fonction.

1. Dans le formulaire Qt, il faut utiliser des radios boutons contenus dans un même groupe.
2. Toujours dans le formulaire Qt, créer un "LineEdit" (qui sera caché) correspondant au champ de la couche, où l'on va stocker la valeur du radio-bouton coché

3. Dans le fichier Python à placer au même endroit que le projet QGIS : "Définir" les radios butons et le LineEdit

Code:

global rad_case_1
rad_case_1 = dialog.findChild(QRadioButton,"rad_case_1")
global rad_case_2
rad_case_2 = dialog.findChild(QRadioButton,"rad_case_2")
global rad_resultat
rad_resultat = dialog.findChild(QLineEdit,"rad_resultat") # rad_resultat = nom du champ de la couche

4. Dans le fichier Python : Lier une fonction au clic sur les boutons

Code:

QObject.connect(rad_case_1, SIGNAL("clicked()"), fct_rad_resultat)

5. Dans le fichier Python : Créer la fonction qui va remplir automatiquement notre "LineEdit" caché pour compléter le champ.

Code:

def fct_rad_resultat():    
        if rad_case_1.isChecked() == 1:
        rad_resultat.setText("Case 1")
    elif rad_type_trav_2.isChecked() == 1:
        rad_resultat.setText("Case 2")

Voilà la solution que j'utilise pour ce genre de cas...

Si vous avez des questions n'hésitez pas.

@ Bientôt
Guillaume

Dernière modification par CGuillaume (Thu 20 March 2014 10:29)

Hors ligne

 

#3 Thu 20 March 2014 16:03

Brice GAL
Participant occasionnel
Lieu: SYANE
Date d'inscription: 6 Sep 2005
Messages: 42
Site web

Re: QGIS / QT Creator : Boutons de case à cocher liés l'un à l'autre

Bonjour,
merci pour votre retour.

Après avoir gratté un peu, j'ai réussi à lier la couche à l'exécution du PYTHON ...
Par contre des messages d'erreur s'affichent systématiquement au lancement du formulaire de saisie. Il semble qu'il y ait des erreurs dans le code ...
J'ai beau chercher, je ne trouve pas de piste de résolution ....

global rad_case_1
rad_case_1 = dialog.findChild(QRadioButton,"rad_case_1")
global rad_case_2
rad_case_2 = dialog.findChild(QRadioButton,"rad_case_2")
global rad_resultat
rad_resultat = dialog.findChild(QLineEdit,"COCHE")
QObject.connect(rad_case_1, SIGNAL("clicked()"), fct_rad_resultat)
def fct_rad_resultat():   
        if rad_case_1.isChecked() == 1:
        rad_resultat.setText("livre")
    elif rad_type_trav_2.isChecked() == 1:
        rad_resultat.setText("conforme")

Cordialement
B. GAL


B. GAL
Resp SI / SIG / Informatique
SYANE

Hors ligne

 

#4 Thu 20 March 2014 16:42

CGuillaume
Participant actif
Lieu: Annecy
Date d'inscription: 3 Aug 2011
Messages: 59

Re: QGIS / QT Creator : Boutons de case à cocher liés l'un à l'autre

ReBonjour,

J'ai peu être était un peu vite sur la première réponse.

L'idée générale est de suivre la démarche expliquée dans ce tutos (en anglais mais facile à comprendre): http://nathanw.net/2011/09/05/qgis-tips … hon-logic/

Pour vous le code python devrai ressembler à ça :

Code:

from PyQt4.QtCore import *  
from PyQt4.QtGui import * 

myDialog = None

def formOpen(dialog,layerid,featureid):
    # 1.Definition des widgets QT
    global rad_case_1
    rad_case_1 = dialog.findChild(QRadioButton,"rad_case_1")
    
    global rad_case_2
    rad_case_2 = dialog.findChild(QRadioButton,"rad_case_2")
    
    global rad_resultat
    rad_resultat = dialog.findChild(QLineEdit,"rad_resultat") # rad_resultat = nom du champ de la couche
    rad_resultat.setVisible(0) # 0 Pour le rendre invisible - 1 Pour qu il soit visible (valeur par defaut)
    
    #2. Liaison de la fonction qui remplira notre LineEdit
    QObject.connect(rad_case_1, SIGNAL("clicked()"), fct_rad_resultat)
    QObject.connect(rad_case_2, SIGNAL("clicked()"), fct_rad_resultat)
    
def fct_rad_resultat():    
    if rad_case_1.isChecked() == 1:
        rad_resultat.setText("Case 1")
    elif rad_type_trav_2.isChecked() == 1:
        rad_resultat.setText("Case 2")

Pour répondre à vos MP, un simple Notepad++ suffit pour créer le fichier python. Et pour ce qui est de la doc sur Qt, je fait des recherches avec comme mots clés les noms des widjets ce qui me mène à ce genre de pages bien utiles dans la majorité des cas: http://qt-project.org/doc/qt-4.8/qlineedit.html

J'espère avoir était plus clair dans mes explications.

En tous cas bon courage et bienvenue dans le monde magique du Python smile

Guillaume

Hors ligne

 

#5 Fri 21 March 2014 11:01

Brice GAL
Participant occasionnel
Lieu: SYANE
Date d'inscription: 6 Sep 2005
Messages: 42
Site web

Re: QGIS / QT Creator : Boutons de case à cocher liés l'un à l'autre

Bonjour,

votre second message m'a bien aidé. J'avais effectivement vu les pages Web que vous citez, mais sans prêter plus d'attention.
Je fais un bilan pour ceux qui seraient amenés à faire ce même travail, en étant "débutant" comme moi sur la partie PYTHON dans QGis...
Dans la version 1.8, dans les propriétés de la couche, dans les rubriques:
"Editer interface" : indiquer le fichier *.ui correspondant au formulaire à utiliser
"Fonction d'initialisation" : indiquer l'appel à la fonction python avec syntaxe sous la forme: nom du fichier python.nom de la fonction python
Attention à bien appeler  la bonne fonction, pour ma part j'ai buté sur ce point ....

Je dois à présent finaliser le paramétrage pour faire fonctionner le formulaire avec plusieurs boutons radio exécutant le script python ...

B. GAL


B. GAL
Resp SI / SIG / Informatique
SYANE

Hors ligne

 

Pied de page des forums

Powered by FluxBB