#1 Wed 07 February 2024 13:27
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
QGIS/Python: Interface multi-boites
Bonjour,
Je suis entrain de tester des boites de dialogua qui s'appellent entre elles.
Sur internet, j'ai trouvé une exemple en vidéo qui permet le construction de celles-ci via QtDesigner.
La 1ère boite est de type MainWindow et les deux autres de type QDialog
Ci joint un zip contenant les différents fichiers
Le fichier appelant est Principal.py
La fenêtre principale est décrite dans le fichier Menu.py
Les 2 fenêtres appelées sont décrites dans le sous-répertoire biblio
Il faut mettre l'arborescence dans C:/temp par exemple et modifier en conséquence la ligne qui met à jour le path
Quand on exécute ce script (Principal.py) via l'éditeur de script de QGIS, on a tout de suite le message ci-dessous alors que le fichier Menu.py est à mon sens au bon endroit
ModuleNotFoundError: No module named 'menu'
Merci de votre aide et bonne journée, PYJ
Hors ligne
#2 Wed 07 February 2024 15:27
- LPlante
- Participant occasionnel
- Date d'inscription: 17 Nov 2021
- Messages: 44
Re: QGIS/Python: Interface multi-boites
Bonjour
Visiblement le fichier menu.py (appelé Menu_QT) devrait etre utilisé dans un import et pas from
Dernière modification par LPlante (Wed 07 February 2024 15:47)
Hors ligne
#3 Wed 07 February 2024 16:10
Re: QGIS/Python: Interface multi-boites
Bonjour,
Il s'agit d'un problème de casse. L'appel doit se faire avec le bon nom. Ici, ligne 8, Menu avec un M, vu que le *.py s'appelle ainsi avec une majuscule. Mais ce n'est pas le seul problème. Cf. problème de nom de la classe ligne 38 ('Ui_MainWindow' et pas 'Ui_Dialog' ?).
Mais il reste d'autres soucis ensuite.
Est-ce que tu utilises un IDE pour ton code ?
Bonne journée.
Dernière modification par Sylther (Wed 07 February 2024 16:11)
Hors ligne
#4 Fri 09 February 2024 06:54
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
Re: QGIS/Python: Interface multi-boites
Bonjour;
J'avance petit à petit
J'ai intégré le code dans un plugin sans passer par Plugin Builder.
Je vais donc plus loin maintenant.
Pour répondre à ta question, pour le moment, j'écrit le code avec un NotePad++
Merci
PYJ
Hors ligne
#5 Fri 09 February 2024 17:47
Re: QGIS/Python: Interface multi-boites
Hello,
Ah super. Ceci étant, plugin Builder est rudement bien fichu pour avoir un squelette d'extension conforme au bonne pratiques.
Peut-être que tu peux passer à un IDE dédié à python, cela aide bien pour le développement, aussi ?
Complétion, liens entre les différents fichier qui composent ton projet, rappel de la syntaxe des functions, simplification du versionning pour ne citer que ces fonctionalités. Gros gain de productivité en perspective et aussi souvent accentuation dela courbe d'apprentissage !
Tu peux en trouver grand nombre ici : https://www.epsi.fr/5-ide-developpement-python/
Tous ne sont pas FOSS ni gratuit. (perso j'ai un faible pour pyCharm community edition).
Bonne journée.
Hors ligne
#6 Sat 10 February 2024 09:02
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
Re: QGIS/Python: Interface multi-boites
Bonjour,
Je passe en effet d'habitude par Plugin Builder, mais là comme j'ai besoin de plusieurs IHM qui s'appellent les unes avec les autres, je ne savais pas faire
Dans ce cas, si je fais le squelette avec Plugin Builder, la 1ère boite ne sera pas une MainWindow Je choisi alors une autre ?
Pour l'IDE, je vais vois ce que donne pyCharrm
Merci à toi et bonne journée
PY
Hors ligne
#7 Sat 10 February 2024 10:48
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS/Python: Interface multi-boites
Bonjour,
Vous pouvez instancier et afficher des fenêtres ou n'importe quelle interface QT (QDialog, QDockWidget, QMainWindow,...) depuis n'importe quelle autres interface en réagissant à un évènement (Pressed sur un QButton dans votre cas si je me référè à votre code).
Vous pouvez donc parfaitement partir d'un squelette généré avec le Plugin Builder qui servira de point d'entrée puis créer vos autres interfaces avec Qt Designer et les charger depuis votre code au moment opportun.
Pour les charger, vous pouvez au choix:
- Compiler le fichier .ui créer avec Qt designer en fichier python avec l'utilitaire Qt (pyuic5).
- Charger dynamiquement la classe de votre interface grâce au module uic et notamment loadUi (voir cet exemple https://nitratine.net/blog/post/how-to- … ython-gui/)
Une autre solution et de définir vos interfaces directement dans le code en décrivant votre interface directement en python. Pour des interfaces simples ceci est viable mais dés que vous allez créer des interfaces un peu riche le code à produire sera important et peu lisible.
Souvent, une approche mixte est utilisée. On définit les éléments de l'interface dans QT Designer, on les stocke dans un fichier .ui qui est chargé au moment opportun puis après ce chargement, on rend l'interface dynamique en interagissant avec en python en fonction du contexte (cacher des éléments, se connecter à des signaux, ajouter des éléments,...).
Pour la question de l'IDE, en effet Pycharm est la référence pour le développement python et je vous conseille de partir la dessus. Cependant, on lui reproche souvent sa lourdeur et sa consommation de ressources. Visual Studio Code est multilangage, beaucoup plus léger et présente les mêmes fonctionnalités mais la configuration est un peu moins user friendly. Le choix de l'IDE c'est vraiment une question personnelle .
Lorsque vous allez utilisez PyCharm il vous faudra configurer l'interpréteur python associé à votre projet. Pour travailler sur des plugins QGIS sous windows cette configuration est un peu particulière, voici une ressource qui pourra vous aider: https://gis.stackexchange.com/a/428577
Hors ligne