Liste mit QPrinter printen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
cR0N0s
User
Beiträge: 19
Registriert: Sonntag 15. März 2020, 15:45

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.
        """
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@cR0N0s: Schau doch mal was `QPrinter` so an Methoden hat. Welche da wohl eine neue Seite anfangen könnte…
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
cR0N0s
User
Beiträge: 19
Registriert: Sonntag 15. März 2020, 15:45

@__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()

Antworten