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 :

Comment imprimer ce qui a été ajouté par paintEvent à un QTextEdit?


Sujet :

PyQt Python

  1. #1
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut Comment imprimer ce qui a été ajouté par paintEvent à un QTextEdit?
    Bonjour,

    Comme le dit le titre, j'ai réussi à dessiner sur un QTextEdit grâce à un QPainter dans la méthode paintEvent. Voilà un petit code qui fait ça:

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    import sys
    from PyQt5 import (QtWidgets, QtGui, QtCore, QtPrintSupport)
     
    #############################################################################
    class TextEdit(QtWidgets.QTextEdit):
     
        #========================================================================
        def __init__(self, parent=None):
            super().__init__(parent)
     
            self.setPlainText("machin")
     
        #========================================================================
        def paintEvent(self, event): 
     
            painter = QtGui.QPainter()
            painter.begin(self.viewport()) 
            painter.save()
     
            painter.setBrush(QtGui.QBrush(QtCore.Qt.green, QtCore.Qt.SolidPattern))
            painter.drawRect(0,0,100, 100);
     
            painter.setPen(QtCore.Qt.blue)
            painter.setFont(QtGui.QFont("Arial", 30))
            painter.drawText(50, 50, "====Qt====")
     
            painter.restore()
            painter.end()
     
            super().paintEvent(event)   
     
    #############################################################################
    class Fenetre(QtWidgets.QWidget):
     
        #========================================================================
        def __init__(self, parent=None):
            super().__init__(parent)
     
            self.tedit = TextEdit(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)
     
        #========================================================================
        @QtCore.pyqtSlot()
        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_())
    Et ça marche: Le QTextEdit fait bien apparaître non seulement le texte normalement ajouté, mais aussi ce qui a été dessiné grâce à paintEvent.

    Mais, si je veux imprimer ce que je vois à l'écran (avec ".print_"), tout ce qui a été ajouté par paintEvent a disparu!

    Quelqu'un saurait-il comment faire pour imprimer le tout?
    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

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

    J'ai trouvé: il suffit de remplacer "self.tedit.print_(printer)" par: "self.tedit.render(printer)".

    Mais, ne me demandez pas pourquoi...
    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

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

Discussions similaires

  1. [WD17] Comment savoir ce qui a été modifié par l'utilisateur ?
    Par meganulos dans le forum WinDev
    Réponses: 8
    Dernier message: 24/10/2013, 16h32
  2. Comment imprimer un état CR en passant par un Socket
    Par PascalCmoa dans le forum Développement Windows
    Réponses: 0
    Dernier message: 06/10/2011, 14h52
  3. Réponses: 1
    Dernier message: 16/09/2008, 14h35
  4. Réponses: 1
    Dernier message: 09/10/2006, 21h31
  5. Réponses: 6
    Dernier message: 26/09/2005, 18h35

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