Seite 1 von 1

Liste mit QPrinter printen

Verfasst: Freitag 16. September 2022, 17:43
von cR0N0s
Moin moin,

Mein Ziel ist es, eine Liste aus Texten an einem Drucker auf einmal ausdrucken zu können.
Möglichst jedes neue Listenelement soll mit einer neuen Seite anfangen.
Deshalb kann ich den Text nicht einfach zusammenhängend in einem QTextEdit versammeln.
Im optimalem Fall ist die aneinander Reihung dieser Texte in der Vorschau anschraubbar und druckbar.

Von selbst bin ich noch nicht auf eine Lösung gekommen und wäre sehr dankbar für den einen oder anderen Lösungsansatz.
LG, cR0N0s

Code: Alles auswählen

def alles_printen(self):
    printer = QtPrintSupport.QPrinter(QtPrintSupport.QPrinter.HighResolution)
    previewDialog = QtPrintSupport.QPrintPreviewDialog(printer)
    previewDialog.paintRequested.connect(self.print_vorschau_liste)
    previewDialog.exec_()
    
def print_vorschau_liste(self, printer):
    text_liste = []
    for t in self.Ticket_verlauf: # ein dictionary
        text_liste.append(self.Ticket_verlauf[t][0])
        
        """
        text_liste.print_(printer) # eine Liste aus Texten soll ausgedruckt werden.
        Einzelne Listenelemente wären ohne Probleme druckbar nur nicht alles zusammenhängend.
        """

Re: Liste mit QPrinter printen

Verfasst: Samstag 17. September 2022, 15:24
von __blackjack__
@cR0N0s: Schau doch mal was `QPrinter` so an Methoden hat. Welche da wohl eine neue Seite anfangen könnte…

Re: Liste mit QPrinter printen

Verfasst: Sonntag 18. September 2022, 18:10
von cR0N0s
@__blackjack__ danke für den Wink mit dem Zaunpfahl. Ich denke, so könnte es funktionieren, zumindest melden sich keine Fehler und alle Seiten werden angezeigt.

Code: Alles auswählen

def alles_printen(self):
    printer = QtPrintSupport.QPrinter(QtPrintSupport.QPrinter.HighResolution)
    previewDialog = QtPrintSupport.QPrintPreviewDialog(printer)
    previewDialog.paintRequested.connect(self.print_vorschau_liste)
    previewDialog.exec_()
    
def print_vorschau_liste(self, printer):
    
    painter = QtGui.QPainter()
    painter.begin(printer)
    font = QtGui.QFont()
    font.setFamily("Segoe UI")
    font.setPointSize(12)
    font.setBold(True)
    painter.setFont(font)
    
    seiten = 0
    for t in self.Ticket_verlauf: # ein dictionary
        
        if seiten != 0:
            printer.newPage()

        painter.drawText(printer.pageRect(), QtCore.Qt.AlignCenter|QtCore.Qt.AlignTop, self.Ticket_verlauf[t][0])
        
        seiten += 1
    painter.end()