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 :

problème avec QPrintPreviewDialog


Sujet :

PyQt Python

  1. #1
    Membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Points : 56
    Points
    56
    Par défaut problème avec QPrintPreviewDialog
    Bonjour,
    avez vous déjà rencontré ce problème.
    Mon appli me permet d'imprimer des fiches recettes et pour cela j'utilise QtPrintSupport.QPrintPreviewDialog() se qui me permet de visualiser avant d'imprimer et ensuite de choisir l'imprimante et de lancer l'impression. tout marche bien quand je lance mon appli soit par l'invite dos ou directement avec PyScripter "*.py".
    Je créé un exécutable avec cx_freeze et quand j'utilise l’exécutable "*.exe" j'ai bien l’aperçu avant impression mais le bouton des paramètres de la page n'est pas disponible et surtout quand je veux imprimer il m'oblige à enregistrer le fichier en format PDF.
    j'essaye de comprendre et de chercher mais je n'ai rien trouvé à ce sujet.
    Faut il ajouter une option ou un module dans mon setup ?
    Voici la partie de mon code :
    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
    # options d'inclusion/exclusion des modules
    includes = ["os","sys","shutil","math","datetime","PyQt5","pickle","PIL"]
    excludes = []
    packages = []
     
    # copier les fichiers et/ou répertoires et leur contenu:
    includefiles = []
    excludefiles=[]
    if sys.platform == "win32":
        includefiles += [(r"C:\Python34\Lib\site-packages\PyQt5","PyQt5")]
        includefiles += [(r"C:\Python34\Lib\site-packages\PyQt5\translations","translations")]
        includefiles += [(r"D:\Compilation cahier\icones","icones")]
        includefiles += [(r"D:\Compilation cahier\Parametres","Parametres")]
        includefiles += [(r"D:\Compilation cahier\Modules","Modules")]
        includefiles += [(r"D:\Compilation cahier\Bibliotheque","Bibliotheque")]
    else:
        pass
    # construction du dictionnaire des options
    options = {"path": path,
               "includes": includes,
               "excludes": excludes,
               "packages": packages,
               "include_files": includefiles,
               "include_msvcr" : True,
               }
    Merci d'avance de votre aide

  2. #2
    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,

    Il manque 2 choses dans ton code:

    - l'ajout du répertoire plugins

    => ajouter dans le setup:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    includefiles += [(r"C:\Python34\Lib\site-packages\PyQt5\plugins","plugins")]
    - l'ajout d'un fichier "qt.conf" permettant à PyQt de retrouver ses petits

    créer un fichier qt.conf contenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [Paths] 
    Prefix = .
    Plugins = plugins
    Translations = translations
    et ajouter sa copie dans le setup avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    includefiles += ["qt.conf"]
    A noter que, bizarrement, même sans parler de cx_freeze, le qt.conf apporté par l'installation normale de PyQt (4 ou 5) n'est pas bon! Il faut donc le corriger: il faut le mettre au même niveau que python.exe, et doit contenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [Paths]
    Prefix = Lib/site-packages/PyQt5
    Binaries = .
    Libraries = .
    Plugins = plugins
    Translations = translations
    [Edit] Au cas où ça intéresserait quelqu'un, voilà mon code de test de QPrintPreviewDialog:

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3
     
    import sys
    from PyQt5 import (QtWidgets, QtCore, QtPrintSupport)
     
    #############################################################################
    class Fenetre(QtWidgets.QWidget):
     
        def __init__(self, parent=None):
            super().__init__(parent)
     
            self.tedit = QtWidgets.QTextEdit(self)
     
            self.bouton = QtWidgets.QPushButton("imprimer", self)
            self.bouton.clicked.connect(self.imprimer)
     
            posit = QtWidgets.QGridLayout()
            posit.addWidget(self.tedit, 0, 0)
            posit.addWidget(self.bouton, 1, 0)
            self.setLayout(posit)
     
        def imprimer(self):
            printer = QtPrintSupport.QPrinter()
            preview = QtPrintSupport.QPrintPreviewDialog(printer)
            preview.paintRequested.connect(self.tedit_printPreview)
            preview.exec_()
     
        @QtCore.pyqtSlot("QPrinter")
        def tedit_printPreview(self, printer):
            self.tedit.print_(printer)
     
    #############################################################################
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        fen = Fenetre()
        fen.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        fen.show()
        sys.exit(app.exec_())
    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

  3. #3
    Membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Tout fonctionne, c'est parfait.
    Un grand merci à toi Tyrtamos.

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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