Python pyqt5 как конвертировать QMainWindow в QGraphicsView и просмотреть его с помощью QPainter - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь использовать QtPainter для предварительного просмотра всего моего QMainWindow (всего содержимого), чтобы я мог распечатать его из меню предварительного просмотра. Все мои попытки провалились. Ниже приведен пример кода.

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import *
from PyQt5 import uic, QtPrintSupport
from PyQt5.QtPrintSupport import QPrintDialog, QPrinter
from PyQt5 import QtCore, QtWidgets, QtPrintSupport, QtGui
import sys, os
class mainwindowUI(QMainWindow):
    resized = QtCore.pyqtSignal()
    def __init__(self, parent = None):
        super(mainwindowUI, self).__init__(parent)
        self.text = QLineEdit('Hello World', self)
        self.print_()
        self.show()
    def print_(self):
        dialog = QtPrintSupport.QPrintPreviewDialog() # PyQt5
        # dialog = QPrintPreviewDialog()
        dialog.paintRequested.connect(self.handlePaintRequest)
        dialog.exec_()

    def handlePaintRequest(self, printer):
        painter = QtGui.QPainter()
        # Start painter
        painter.begin(printer)
        # Grab a widget you want to print
        screen = self.grab()
        # Draw grabbed pixmap
        painter.drawPixmap(10, 10, screen)
        # End painting
        painter.end()
        self.graphicsView = QGraphicsView(painter)
        self.graphicsView.render(QPainter(printer))
        self.viewer.render(QPainter(printer))

    def handlePrint(self):
        dialog = QtPrintSupport.QPrintDialog()
        if dialog.exec_() == QDialog.Accepted:
            self.editor.document().print_(dialog.printer())
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = mainwindowUI()
    sys.exit(app.exec_())

Что я хочу, окно предварительного просмотра QtPainter, показывающее мой QMainWindow и все внутри него. Похоже, что QtPainter принимает QGraphicsView, так что каким-то образом мое главное окно должно быть преобразовано в это .... (Я использую файл .ui в своем последнем проекте, который я разработал в QtCreator, на всякий случай, когда что-то делает сложнее)

...