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 :

pyinstaller et QStyle


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut pyinstaller et QStyle
    bonjour,
    Un peu de contexte: j'utilisait cx_freeze avant, mais à chaque fois je me retrouvais avec ~200mo (~40mo une fois les trucs inutiles à mon programme enlevés, merci Qt)...
    Puis comme ça un jour j'ai testé pyinstaller, nickel, je passe de 200mo à trier à 40mo, pas besoin de faire de trie et si je veut je peut faire un seul fichier .exe (17mo) qui met au pire 5s de plus à s'ouvrir que le code source (quasi pareil sur ssd).

    Mais le problème est au niveau du Qstyle, je suis pas sur que du code soit nécessaire pour l'instant, à gauche le code source et à droite le code freezé
    Nom : Sans titre.png
Affichages : 954
Taille : 33,3 Ko

    print(QtWidgets.QStyleFactory.keys()) -> ['windowsvista', 'Windows', 'Fusion'].

    Bon la je me dit j'ai juste à faire app.setStyle('windows') mais en faite c'est tout le contraire c'est le .exe freezé qui utilise le style Windows, sinon je peut utiliser le style Fusion et la aucun soucis.. mais moi je veut pas le style fusion :'(

    J'ai feuilleté la doc sur les QStyles/QCommonStyles, y'a pourtant un paragraphe sur comment faire un Qstyle custom mais là c'est le flou total ...
    En faite je me demande bien ce qu'un un QStyle? est-ce une sorte de stylesheet ?

    j'ai naïvement tenté print(app.style()) pour voir s'il renvoyait str et qu'un petit coup de copier coller allait suffire mais non, j'ai un QCommonStyle..
    J'ai tenté de dumps le QCommonStyle, ça à bien marché mais maintenant comment utiliser ce fichier ?

    Edit: Je me suis dit il y un surement des gens qui on crée des Qstyles et qui les ont fait partager.. mais je n'est rien trouvé sur Google :/

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà le "standard" que j'utilise dans mes programmes (app est QtWidgets.QApplication(sys.argv)):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        if "Fusion" in [st for st in QtWidgets.QStyleFactory.keys()]:
            app.setStyle(QtWidgets.QStyleFactory.create("Fusion"))
        elif sys.platform=="win32":
            app.setStyle(QtWidgets.QStyleFactory.create("WindowsVista"))
        elif sys.platform=="linux":
            app.setStyle(QtWidgets.QStyleFactory.create("gtk"))
        elif sys.platform=="darwin":    
            app.setStyle(QtWidgets.QStyleFactory.create("macintosh"))
     
        app.setPalette(QtWidgets.QApplication.style().standardPalette())
    Je fais comme ça parce que mes programmes sont multiplateformes (Windows, Linux, Mac). Mais, contrairement à toi, je rends prioritaire le mode "Fusion" quand il existe.

    Avec ça, je n'ai pas de problème avec cx_freeze (j'utilise très rarement pyinstaller).

  3. #3
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Merci pour vôtre réponse, mais quand vous utilisé cx_freeze il ne vous copie pas tout le dossier de pyqt (Python\Python36\Lib\site-packages\PyQt5) ?

    Et après est-il possible d'utiliser n'importe quel Qstyle sur n'importe quel os ? est il possible de dump sur un os et de l'utiliser sur un autre ?
    Après tout même une fois le style Fusion appliqué app.style() renvoie toujours un QCommonStyle.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Même pour une fenêtre de base (QWidget), la taille obtenue pour le répertoire contenant le "exe" après traitement par cx_freeze atteint environ 200Mo. Il est vrai que les bibliothèques importées sont en trop grand nombre et concernent beaucoup de modules qu'on n'utilise pas. Mais pour moi, une taille de 200Mo est acceptable compte tenu des PC actuels. Et pour transmettre facilement ce répertoire, un "zip" avec des adresses relatives est facile à fabriquer.

    Et pour transmettre un fichier unique, on peut aussi créer un programme d'installation avec, par exemple, "innosetup" sous Windows! => http://www.jrsoftware.org/isinfo.php.

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Petit complément concernant le style.

    Apparemment, chaque OS a son style, et on ne peut pas appliquer à un OS un style qui n'a pas été prévu. Il semble même que PyQt n'ait pas reçu toutes les possibilités de Qt pour customiser les styles (voir la mailing-liste de RiverBankComputing: https://www.riverbankcomputing.com/pipermail/pyqt/).

    Par exemple, pour Windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print([st for st in QtWidgets.QStyleFactory.keys()])
    ['Windows', 'WindowsXP', 'WindowsVista', 'Fusion']
    Si maintenant on veut voir dans un programme quel style a été appliqué:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    style = app.style().metaObject().className()
    print(style[1:-5])
    Le "[1:-5]" vient du fait que style est un string qui renvoi en fait "QFusionStyle" pour le style "Fusion" (etc...).

    Il existe cependant d'autres possibilités pour modifier le graphisme en utilisant les stylesheets. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # met des tooltips à fond jaune clair dans toute l'application
    app.setStyleSheet("QToolTip {background-color: #ffff99; border: 1px solid black}")
    On peut aussi avec setStyleSheet modifier l'apparence (couleur, forme, comportement à la souris, etc...), par exemple, des boutons d'une fenêtre.

    On peut aussi définir une icône d'application valable pour toutes les fenêtres du programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # mettre la même icone pour toutes les fenêtres de l'application
    app.setWindowIcon(QtGui.QIcon('icone.png'))

  6. #6
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Bonjour,
    Merci pour vos réponse. C'est peut être moi mais si on ne sait pas quoi chercher dans riverbank on est perdu, il faut ouvrir une à une les archives et espérer trouver par miracle ^^
    Bon ... Grosse modo je vais passer d'un fichier stylesheet de 200ligne à plusieurs milliers si je veut imiter un style en particulier :'( je ne m'y aventurerai pas x)

    Si j'ai bien compris par contre je peut utiliser ces stylesheets (https://wiki.qt.io/Gallery_of_Qt_CSS_Based_Styles) dans mon application sans problème de droit ?

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

Discussions similaires

  1. PyInstaller, un tuto ?
    Par rambc dans le forum Bibliothèques tierces
    Réponses: 2
    Dernier message: 28/02/2009, 11h30
  2. Fichier Version PyInstaller
    Par metalamania dans le forum Déploiement/Installation
    Réponses: 2
    Dernier message: 30/07/2008, 22h59
  3. Compilation avec PyInstaller
    Par Jiyuu dans le forum Déploiement/Installation
    Réponses: 1
    Dernier message: 29/04/2008, 20h01
  4. Programme pour PyInstaller
    Par metalamania dans le forum Déploiement/Installation
    Réponses: 3
    Dernier message: 01/06/2007, 16h16
  5. pyinstaller sous Linux
    Par jbjweb dans le forum Déploiement/Installation
    Réponses: 1
    Dernier message: 20/02/2007, 21h00

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