Pages: 1
- Sujet précédent - QGIS / QT Creator : Boutons de case à cocher liés l'un à l'autre - Sujet suivant
#1 Wed 19 March 2014 17:36
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
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
Guillaume
Hors ligne
#5 Fri 21 March 2014 11:01
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
Pages: 1
- Sujet précédent - QGIS / QT Creator : Boutons de case à cocher liés l'un à l'autre - Sujet suivant