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 :

[QtDesigner] Problème d'affichage des icônes


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut [QtDesigner] Problème d'affichage des icônes
    Bonjour,

    J'ai crée une appli avec QTDesigner (PyQT5) dans laquelle je mets des icones pour mes boutons. Quand je lance ma console directement dans le dossier où se trouve tous les fichiers (cad .ui, .ui.py et py), je n'ai aucun probleme d'affichage même si les icones sont dans un autre dossier. Mais dés que je change de répertoires (par exemple l'ouverture de ma console à l'interieur de mon projet ou dans mon home en spécifiant le chemin) je n'ai plus mes icones. Même la taille de mes boutons est plus petite.



    J'ai essayé de spécifier le chemin de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    icon = QIcon()
    icon.addPixmap(QPixmap("../images/media-optical-video.png"), QIcon.Normal, QIcon.Off)
    self.ui.btnacquisitiondv.setIcon(icon)
    self.ui.btnacquisitiondv.setIconSize(QSize (48, 48))
    self.ui.btnacquisitiondv.setDefault(False)
    self.ui.btnacquisitiondv.setAutoDefault(True)
    self.ui.btnacquisitiondv.setFlat(False)
    Par avance, merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Le probleme c'est que tu utilises des adresses relatives donc si tu ne lances pas le logiciel depuis son dossier, l'adresse n'est plus la bonne...

    Le mieux est d'utiliser un fichier de ressource via QtDesigner, ainsi jamais de problème d'adresse, il saura toujours où les prendre.
    C'est un fichier .qrc qu'il faut convertir en py via pyrcc5 MKVRessources.qrc -o MKVRessources_rc.py
    en créant ton interface graphique via pyuic5 ui_MKVExtractorQt.ui -o ui_MKVExtractorQt.py, il ajoutera une ligne qui charge ce nouveau fichier py : import MKVRessources_rc
    De memoire le _rc est important dans le nom du nouveau fichier py.

    Pour la taille des boutons, ils s'adaptent à leur contenu donc si l'icone est grande, le bouton le sera aussi, si pas d'image, une taille normale (peut etre avec un minimum défini).
    Sous Kubuntu 20.04

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    On peut aussi calculer l'adresse absolue au cours de l'exécution avec l'adresse du fichier .py lancé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin = os.path.join(os.path.dirname(__file__), cheminrelatif)
    Avec quelques modifs au cas où le code Python serait traité par cx_freeze, pyinstaller ou équivalent.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    Salut à vous deux et merci de m'aider.

    Je vais tester les 2 solutions. Je viens de trouver comment créer un fichier de ressource.qrc dans qt Designer. C'était mon principal blocage. Les chemins étaient ceux que tu as dans le fichier ui.py généré par pyuic5
    Avec les explications d'Hizoka et la doc,

    Pour la taille des boutons, ils s'adaptent à leur contenu donc si l'icone est grande, le bouton le sera aussi, si pas d'image, une taille normale (peut etre avec un minimum défini).
    Tu confirmes ce que je pensais aussi et j'ai défini une taille minimale dans mon fichier ui.

    Question bête que je préféré posée même si je pense que je dois le faire pour chaque fichier ayant des images
    Dois-je créer un fichier qrc pour chaqu'un ? sachant que j'en ai trois (fichier principal, préférences et a propos)

    Bonjour,

    On peut aussi calculer l'adresse absolue au cours de l'exécution avec l'adresse du fichier .py lancé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part

    chemin = os.path.join(os.path.dirname(__file__), cheminrelatif)

    Avec quelques modifs au cas où le code Python serait traité par cx_freeze, pyinstaller ou équivalent.
    Toutefois, je testerai aussi la solution de Thyrtamos bien que les chemins relatifs et absolu ne soient pas mon fort, vu les problèmes que j'ai pour créer un lanceur mais chaque chose en son temps.

    Je reviens dés que j'ai réussi à y faire marcher.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Tu peux utiliser le meme fichier de ressources.
    Sous Kubuntu 20.04

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    Tu peux utiliser le meme fichier de ressources.
    En effet.

    La bonne nouvelle est que mes icones s'affichent dorenavent et avec les deux methodes en plus.

    Pour ceux et celles qui passeraient, voici la procédure à suivre :

    Methode d'hizoka avec un fichier ressource que l'on nommera ressources.
    • créer un fichier ressource avec Qtdesinger onglet explorateur de ressources>cliquez sur les 3 points à gauche>creer un fichier qrc dans la nouvelle boite de dialogue qui s'ouvre
    • creer un nouveau prefix (le renommer ?)
    • on importe les icones
    • on converti le dit fichier qrc en py avec la commande suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pyrcc5 ressources.qrc -o ressources_rc.py
    • on met le fichier rc.py avec ses fichiers
    • on l'importe dans le fichier principal avec import ressources_rc
    • on regenere le fichier ui une fois tout fini avant de lancer le fichier pour voir le resultat dans une console python

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pyuic5 -x monfichierui -o monfichierui.py
    Methode de thyrtamos avec les chemins relatifs en python, exemple une icone de la fenetre a propos de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    icon_path = os.path.join(os.path.dirname(__file__), "../images/tool-animator.png")
            self.ui.lblimageicon.setPixmap(QPixmap(icon_path))
            self.ui.lblimageicon.setMaximumSize(QSize(220, 340))
            self.ui.lblimageicon.setScaledContents(True)
    Le mettre dans la methode setupUi
    Les 2 methodes fonctionnent bien toutefois, la 2eme est à privilégier si vous n'avez pas beaucoup d'icones, et l'inverse dans le cas contraire. Après c'est juste une question de temps.

    Merci à vous deux, résolu. Je m'attaque maintenant aux preferences.

    Ce serait bien de le rajouter dans le $$2 du tuto Trucs et Astuces pour PyQT

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Perso je préfère utiliser les icônes système mais je mets une icone au cas où dans mon logiciel, j'utilise donc la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    icon = QtGui.QIcon.fromTheme("checkbox", QtGui.QIcon(":/img/checkbox.png"))
    Utilise l'icone checkbox, si elle n'existe pas dans le thème alors utilise celle dans le fichier ressource

    Alors vu que toutes les icones ou presque sont gérées par le fichier ui, je lance cette commande sur mon fichier py fraîchement créé (commande linux !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i '/icon = QtGui.QIcon.fromTheme/ s@\([^"]*\)"\([^"]*\)")@\1"\2", QtGui.QIcon(":/img/\2.png"))@g' ui_MKVExtractorQt.py
    ça me modifie toutes les lignes d'utilisation d’icônes système.
    Sous Kubuntu 20.04

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    Je n'ai pas encore essayé d'utiliser les icones systeme. Mais je ne le ferai pas au moins pour ce logiciel. Après on verra.
    Merci quand meme pour l'astuce.
    Pas mal la commande bash.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ADSL] Problème d'affichage des pages
    Par adam22 dans le forum Dépannage et Assistance
    Réponses: 9
    Dernier message: 07/12/2005, 14h36
  2. Problème d'affichage des tables
    Par talere dans le forum Access
    Réponses: 6
    Dernier message: 24/10/2005, 13h02
  3. Problème d'affichage des caractères accentués
    Par ostaquet dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 06h58
  4. [JTable] Problème d'affichage des données
    Par ddams dans le forum Composants
    Réponses: 2
    Dernier message: 15/09/2004, 17h07
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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