Я пытаюсь использовать 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, на всякий случай, когда что-то делает сложнее)