IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Chemin relatif pour les images


Sujet :

PyQt Python

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 105
    Points : 58
    Points
    58
    Par défaut Chemin relatif pour les images
    Bonjour,
    J'utilise qt designer et pyqt6.
    Quand je mets une image avec qtdesigner (label et pixmap) le chemin dans le fichier UI est relatif et si j'utilise un fichier ressource il est déclaré mais quand je transforme ce fichier avec pyuic le chemin devient absolu ou si j'ai utilisé un fichier ressource le fichier n'est pas déclaré.
    Je fais qqc de mal ?
    Comment solutionner cela.
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par knarf44 Voir le message
    Je fais qqc de mal ?
    Désolé je ne suis pas encore passé à PyQt6 mais sous PyQt5, mes chemins relatifs restent en relatif

    Exemple: fichier "untitled.ui"
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>Form</class>
     <widget class="QWidget" name="Form">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>575</width>
        <height>531</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>Form</string>
      </property>
      <widget class="QLabel" name="label">
       <property name="geometry">
        <rect>
         <x>230</x>
         <y>90</y>
         <width>291</width>
         <height>281</height>
        </rect>
       </property>
       <property name="text">
        <string/>
       </property>
       <property name="pixmap">
        <pixmap>Logo.jpg</pixmap>
       </property>
      </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>

    Et quand je le passe via pyuic5...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'untitled.ui'
    #
    # Created by: PyQt5 UI code generator 5.11.3
    #
    # WARNING! All changes made in this file will be lost!
     
    from PyQt5 import QtCore, QtGui, QtWidgets
     
    class Ui_Form(object):
        def setupUi(self, Form):
            Form.setObjectName("Form")
            Form.resize(575, 531)
            self.label = QtWidgets.QLabel(Form)
            self.label.setGeometry(QtCore.QRect(230, 90, 291, 281))
            self.label.setText("")
            self.label.setPixmap(QtGui.QPixmap("Logo.jpg"))
            self.label.setObjectName("label")
     
            self.retranslateUi(Form)
            QtCore.QMetaObject.connectSlotsByName(Form)
     
        def retranslateUi(self, Form):
            _translate = QtCore.QCoreApplication.translate
            Form.setWindowTitle(_translate("Form", "Form"))
    L'image nommée "Logo.jpg" est bien restée en relatif...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Je suis surpris, pyuic utilise le fichier ui, si le chemin est relatif dans le fichier ui, pyuic ne peut pas le transformer en chemin absolu. Cette donnée lui est inconnue.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Cette donnée lui est inconnue.
    Elle peut se retrouver par rapport à l'endroit où on se trouve (os.path.abspath() sait parfaitement le faire en éliminant même les déplacements inutiles style "toto/../." alors que le dossier "toto" n'existe pas). Mais je suis d'accord ça reste étonnant qu'il fasse ce travail inutile d'une part et surtout qui va au final pourrir la vie de beaucoup de dev...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 105
    Points : 58
    Points
    58
    Par défaut
    Je pense que c'est ça il fait avec os.path.
    Je vais tester avec pyuic5 pour voir et, le cas échéant signaler le bug.

    Ma ligne de commande est celle-ci : pyuic6 --execute -o file.py vous avez autre choses avec le 5 ?

    J'ai vu que le 4 avait une option (--from-imports) pour les chemins relatifs mais je ne vois pas cette option dans le 6.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par knarf44 Voir le message
    Je pense que c'est ça il fait avec os.path.
    Comme je l'ai dit, ce n'est pas parce qu'on peut faire un truc que pyuic le fait. Surtout quand ce truc fout le bordel. Quoi qu'il en soit, tu vois bien que dans mon exemple le logo reste en relatif. Pourquoi ne le testes-tu pas chez-toi ??? C'est un peu pour ça que je t'ai filé le code du ui !!!

    Citation Envoyé par knarf44 Voir le message
    Ma ligne de commande est celle-ci : pyuic6 --execute -o file.py vous avez autre choses avec le 5 ?
    Pareil (au chiffre près). Sauf que je ne met pas l'option "--execute" qui ne fait que rajouter un bloc if __name__ == "__main__" à la fin permettant d'exécuter directement le code généré pour voir le résultat.

    Citation Envoyé par knarf44 Voir le message
    J'ai vu que le 4 avait une option (--from-imports) pour les chemins relatifs mais je ne vois pas cette option dans le 6.
    Elle y est aussi dans le 5 mais ne concerne que les imports. Si elle n'existe plus dans le 6 c'est probablement parce que le 6 est compatible P3 seulement et dans cette version les imports sont en absolu.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 105
    Points : 58
    Points
    58
    Par défaut
    Comme je l'ai dit, ce n'est pas parce qu'on peut faire un truc que pyuic le fait. Surtout quand ce truc fout le bordel. Quoi qu'il en soit, tu vois bien que dans mon exemple le logo reste en relatif. Pourquoi ne le testes-tu pas chez-toi ??? C'est un peu pour ça que je t'ai filé le code du ui !!!
    C'est un peu la définition d'un bug.

    Quand je compile ton exemple il me rajoute le chemin complet pour arriver au source plus le nom de la photo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # Form implementation generated from reading ui file 'v:\Temp Perso\Image dans Qt\d.ui'
    #
    # Created by: PyQt6 UI code generator 6.2.3
    #
    # WARNING: Any manual changes made to this file will be lost when pyuic6 is
    # run again.  Do not edit this file unless you know what you are doing.
     
     
    from PyQt6 import QtCore, QtGui, QtWidgets
     
     
    class Ui_Form(object):
        def setupUi(self, Form):
            Form.setObjectName("Form")
            Form.resize(575, 531)
            self.label = QtWidgets.QLabel(Form)
            self.label.setGeometry(QtCore.QRect(230, 90, 291, 281))
            self.label.setText("")
            self.label.setPixmap(QtGui.QPixmap("v:\\Temp Perso\\Image dans Qt\\Logo.jpg"))
            self.label.setObjectName("label")
     
            self.retranslateUi(Form)
            QtCore.QMetaObject.connectSlotsByName(Form)
     
        def retranslateUi(self, Form):
            _translate = QtCore.QCoreApplication.translate
            Form.setWindowTitle(_translate("Form", "Form"))

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par knarf44 Voir le message
    Quand je compile ton exemple il me rajoute le chemin complet pour arriver au source plus le nom de la photo.
    Ahah !!! Ca c'est important !!! C'est en effet ce que je voulais savoir.

    Bon, il faut que j'installe PyQt6 pour voir ce qui se passe. Bon ça va j'ai des machines virtuelles pour ce genre de test mais ça va prendre un peu de temps (en plus il faut installer Qt6 et ces cons là ils te demandent tout un tas d'infos que j'ai pas envie de donner...)

    Citation Envoyé par knarf44 Voir le message
    C'est un peu la définition d'un bug.
    Exact. Mais jusqu'à ce dernier retour je t'avoue que je n'y croyais pas.

    [edit]
    Bon PyQt6 je n'y suis pas arrivé (le truc me répondait sans cesse "ERROR: Could not find a version that satisfies the requirement PyQt6-Qt6>=6.2.3" même après avoir installé Qt6) mais j'ai installé PySide6 qui lui non plus ne reproduit pas le souci
    Nom : VirtualBox_Ubuntu20_64b_02_04_2022_19_57_22.png
Affichages : 313
Taille : 366,3 Ko

    Mais suite à la réponse de VinS (je vais d'ailleurs tester sa solution pour installer PyQt6) peut-être effectivement que le souci viendrait de PyQt dans Windows...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Je ne reproduis pas ton problème.
    Ici avec Python-3.10 et PyQt6-6.3.0 installé il y a deux minutes.

    extrait du .ui:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        ...
         <widget class="QPushButton" name="pushButton">
          <property name="text">
           <string notr="true">Click me</string>
          </property>
          <property name="icon">
           <iconset>
            <normaloff>apply.png</normaloff>apply.png</iconset>
          </property>
         </widget>

    Extrait de .py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        ...
            self.pushButton = QtWidgets.QPushButton(self.centralwidget)
            self.pushButton.setText("Click me")
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap("apply.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
    Lorsque tu lances ta commande, est-ce que tu déplaces ton répertoire courant dans v:\Temp Perso\Image dans Qt\ ?

    J'ai l'impression que ton problème vient du fait que ton terminal se trouve dans C:\

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Pour ceux qui veulent tester, voici les commandes à lancer dans un environnement virtuel pour la plus récente version de PyQt6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ source bin/activate
    $ pip install --index-url https://www.riverbankcomputing.com/pypi/simple/ --no-deps --pre PyQt6
    $ pip install --index-url https://www.riverbankcomputing.com/pypi/simple/ --no-deps --pre PyQt6-Qt6
    $ pip install PyQt6.sip

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    J'ai l'impression que ton problème vient du fait que ton terminal se trouve dans C:\
    En tout cas, pyuic5 sous Linux n'a pas ce comportement. Même si je me trouve totalement à l'ouest du dossier contenant le "ui" et que je tape le chemin complet (style le fichier se trouve dans "/tmp", je me touve dans "/home/truc" et je tape pyuic5 -o /tmp/result.py /tmp/untitled.ui) les chemins dans le source généré restent en relatif.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 105
    Points : 58
    Points
    58
    Par défaut
    Bonjour,
    Après de multiples essais sans succès, j'ai perdu pyuic6. Au passage j'ai testé la version 6.3 de vinss sans pyuic.exe mais avec la commande python -m PyQt6.uic.pyuic -o output.py -x input.ui et elle a marché tout en me mettant dans le commentaire que j'avais utilisé la version 6.2.3 alors que pip list me disait que j'utilisait la 6.3.0.

    J'ai eu alors la bonne idée de faire un start from scratch j'ai donc désinstallé python et supprimé tout ce qui lui était lié de prêt ou de loin (clef de registre, fichiers ...).

    Puis j'ai réinstallé python (version pour tous les utilisateurs) j'ai commencé à réinstaller mes librairies avec pip et là bizarre, le pip list ne trouve que pip et setuptools. Pourtant quand je les installes, je les vois arriver dans le dossier C:\Users\moi\Python\lib\site-packages et si je fais un upgrade il me dit qu'elles sont déjà là.
    Si je fais pip list --path C:\Users\user\Python\lib\site-packages il les trouve.

    Vous avez des pistes ?

    Je sais que du coup je dévie du problème initial.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 105
    Points : 58
    Points
    58
    Par défaut
    Bon, j'ai réussi à tout remettre mais je récupère le problème initial.

Discussions similaires

  1. [Python 3.X] Chemin relatif pour charger une image
    Par gadjjj dans le forum Programmation multimédia/Jeux
    Réponses: 5
    Dernier message: 10/09/2021, 17h02
  2. Réponses: 4
    Dernier message: 30/06/2009, 11h36
  3. Chemin relatif pour des images dans formulaire
    Par Marcopololo dans le forum IHM
    Réponses: 3
    Dernier message: 23/07/2008, 04h50
  4. []filtre sepia pour les images
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 27/01/2004, 20h41
  5. Des fonctions OGL pour les images de format usuel ?
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 31/05/2003, 21h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo