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?