#1 Sun 03 March 2024 17:26
- Larpenteur
- Participant actif
- Lieu: Avignon
- Date d'inscription: 24 Jan 2011
- Messages: 139
QGIS 3.10 a 3.28: Erreur Python
Bonjour,
Je travaille sur un projet QGIS initialement conçu en version 3.10.
Mon but est de le faire évoluer vers une version récente, une v 3.28 par exemple en conservant la même configuration (barre d'outils réduites notamment).
En effectuant un test de changement de version je m'aperçois que j'ai une erreur Python, le projet s'ouvre bien mais 3 barres d'outils ont disparus.
C'est ce que je pense reconnaître dans l'erreur Python (voir pj).
Est-ce un problème de version de Python?
Auriez-vous une piste de résolution?
Merci pour votre aide!
Cordialement, Sylvain
Hors ligne
#2 Mon 04 March 2024 11:03
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3944
Re: QGIS 3.10 a 3.28: Erreur Python
Bonjour,
Votre image contient la moitié du message d'erreur. Mais de ce que je vois et même si mActionSelectFeatures est le nom d'un bouton classique de QGIS, les menus n'en viennent pas. N'y aurait-il pas une extension en jeu par hasard? Vous êtes sur le même ordi pour tester votre montée de version?
Hors ligne
#3 Mon 04 March 2024 12:26
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS 3.10 a 3.28: Erreur Python
Bonjour,
Il faut nous présenter la portion de code qui pose problème pour voir comment vous tenter d'accéder à l'objet. Il est possible que le nom de cet objet Qt ait changé dans les nouvelles version.
Dans ma version 3.34 par exemple, je ne retrouve pas d'objet mActionSelectFeatures au sein des toolbar classique de QGIS.
Vous pouvez générer une liste brute des objets disponible dans vos toolbars avec ce code à lancer dans la console python de qgis.
Code:
def print_child(obj, prof=0): print(' '*prof, obj, obj.objectName()) children = obj.children() for child in obj.children(): print_child(child, prof=prof+1) objs = iface.mainWindow().findChildren(QToolBar) for obj in objs: print_child(obj)
Ce code vous génèrera un arbre simplifié présentant la hiérarchie des objets constituant les toolbar de votre qgis.
Hors ligne
#4 Mon 04 March 2024 12:48
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3944
Re: QGIS 3.10 a 3.28: Erreur Python
Dans ma version 3.34 par exemple, je ne retrouve pas d'objet mActionSelectFeatures au sein des toolbar classique de QGIS.
ça doit dépendre de par où on cherche, mais https://github.com/search?q=repo%3Aqgis … ;type=code
Hors ligne
#5 Mon 04 March 2024 13:01
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS 3.10 a 3.28: Erreur Python
En effet, je me suis limité aux éléments de l'interface graphique dérivant des toolbar. La il semblerait qu'il s'agisse d'une action et je la retrouve bien avec
Code:
iface.mainWindow().findChild(QAction, 'mActionSelectFeatures')
Du coup sans l'extrait de code, difficile d'aller plus loin...
Dernière modification par YoLecomte (Mon 04 March 2024 15:04)
Hors ligne
#6 Mon 04 March 2024 13:53
- Larpenteur
- Participant actif
- Lieu: Avignon
- Date d'inscription: 24 Jan 2011
- Messages: 139
Re: QGIS 3.10 a 3.28: Erreur Python
Bonjour à vous,
Je vous remercie pour vos réponse.
Dès demain je transmettrai la portion de code qui pose problème pour plus de clarté.
@Santanna
Oui, je suis sur le même ordinateur pour tester la montée de version.
@YoLecomte
Je pense que votre piste du changement de nom est peut-être la bonne.
Je teste votre code dès demain et je vous fais un retour.
Si vous connaissez des tutos simples pour débuter avec le langage Python je suis preneur.
En tout cas merci beaucoup!
Sylvain
Hors ligne
#7 Tue 05 March 2024 13:45
- Larpenteur
- Participant actif
- Lieu: Avignon
- Date d'inscription: 24 Jan 2011
- Messages: 139
Re: QGIS 3.10 a 3.28: Erreur Python
Bonjour,
Je vous apporte quelques précisions concernant les erreurs Python:
2024-03-05T13:29:39 WARNING Traceback (most recent call last):
File "", line 771, in Menu_SessionCreer_DlgOk
File "", line 310, in Application_Interface
File "", line 2848, in Barres_Gestion
KeyError: 'mActionSelectFeatures'
Line 310: Si je suis la logique ça serait Barres_Gestion() qui poserait problème dans Application_Interface ci-dessous:
Menus_Gestion()
#Gestion des Barres d'Outils
Barres_Gestion()
#Déclaration d'évenements : Gestion Selection+Couche courante
#(Activation/Desactivation Interfaces)
Line 771: Le problème viendrait de Application_Interface() ci-dessous
QGIS_Settings2(lSessionExportsDirChemin)
#Sauvegarde en XML des caractéristiques de la Session
lXmlRacElt = xml.etree.ElementTree.Element('SI_SESSION')
lXmlPrjElt = xml.etree.ElementTree.SubElement(lXmlRacElt, 'PROJET')
lXmlPrjElt.set('NOM', gSIProjetNom)
lSessionXmlChemin = os.path.join(gSessionDirChemin, '{}.xml'.format(gSessionNom))
lXmlArbre = xml.etree.ElementTree.ElementTree(lXmlRacElt)
lXmlArbre.write(lSessionXmlChemin, xml_declaration=True, encoding='utf-8')
#Mise en place de l'Interface si ce n'est pas déjà fait
if gInterfaceFlag==False:
Application_Interface()
#Titre de Fenêtre principale
iface.mainWindow().setWindowTitle('{} - {} - {}'.format(gApplicationTitre, gSIProjetNom, gSessionNom))
Line 2848: Le problème viendrait de lQTB.addAction(gActions['mActionSelectFeatures'])
#Création de la Barre d'Outils SCSelection
lQTB = QToolBar('SCSelection')
lQTB.setObjectName('SCSelection')
iface.mainWindow().addToolBar(QtCore.Qt.TopToolBarArea, lQTB)
lQTB.setMovable(False)
lQTB.addAction(gActions['mActionSelectFeatures'])
lQTB.addAction(gActions['mActionSelectAll'])
lQTB.addAction(gActions['mActionInvertSelection'])
lQTB.addAction(gActions['mActionDeselectAll'])
Je vais tester le code pour générer la liste des objets disponibles.
Merci pour vos retours
Une précision, dans la v 3.10 il y a deux actions qui sont paramétrées.
Sylvain
Dernière modification par Larpenteur (Tue 05 March 2024 14:01)
Hors ligne
#8 Tue 05 March 2024 14:15
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS 3.10 a 3.28: Erreur Python
D'après votre code, il faut chercher dans la façon dont est généré l'objet qui s'appelle gActions. C'est dans cet objet (qui est probablement un dictionnaire python) qu'il manque la clé 'mActionSelectFeatures'.
Donc vous devez chercher comment est construit cet objet.
Hors ligne
#9 Wed 06 March 2024 11:04
- Larpenteur
- Participant actif
- Lieu: Avignon
- Date d'inscription: 24 Jan 2011
- Messages: 139
Re: QGIS 3.10 a 3.28: Erreur Python
Bonjour,
C'est dans le script Python en ma possession que je peux trouver ce dictionnaire qui fait référence à gActions?
Désolé je suis novice en Python et j'essaie de comprendre la structure.
Merci!
Sylvain
Hors ligne
#10 Wed 06 March 2024 14:13
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS 3.10 a 3.28: Erreur Python
Bonjour,
Très probablement oui.
Il doit y avoir quelque part dans le code des instructions permettant d'alimenter ce dictionnaire.
la clé du dictionnaire semble être le nom de l'objet QT (donné par objectName()) et la valeur l'objet QAction lui-même.
il est probable que dans votre nouvelle version ce dictionnaire ne soit pas alimenté, si bien que lorsque vous arrivez dans les lignes qui l'utilise, vous rencontrez l'erreur KeyError indiquant que cette clé 'mActionSelectFeatures' est absente du dictionnaire.
Hors ligne