Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#1 Sun 03 March 2024 17:26

Larpenteur
Participant actif
Lieu: Avignon
Date d'inscription: 24 Jan 2011
Messages: 128

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


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Mon 04 March 2024 11:03

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

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: 239

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: 3799

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: 239

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: 128

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: 128

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: 239

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: 128

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: 239

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

 

Pied de page des forums

Powered by FluxBB