Dazu habe ich dies hier https://doc.qt.io/qtforpython-6/overvie ... sview.html gefunden.
Ich habe dies folgendermaßen umgesetzt:
Code: Alles auswählen
import sys
from PyQt5.QtCore import (
Qt,
QEvent,
QRectF
)
from PyQt5.QtWidgets import (
QApplication,
QDialog,
QGraphicsView,
QGraphicsScene,
QGraphicsItem,
QGraphicsEllipseItem,
)
from PyQt5.QtGui import (
QPen,
QBrush,
QPixmap,
QPainter,
QPdfWriter,
QPagedPaintDevice
)
from PyQt5.QtPrintSupport import (
QPrinter,
QPrintDialog,
QPrintPreviewDialog
)
class GeometryDraw(QGraphicsView):
def __init__(self, ellipses=[]):
super().__init__()
if ellipses == []:
return
self.viewport().installEventFilter(self)
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
self.setCacheMode(QGraphicsView.CacheBackground)
self.ellipses(ellipses)
self.show()
def ellipses(self, ellipses):
for x, y, d, start_angle, span_angle, color in ellipses:
item = QGraphicsEllipseItem(x, y, d, d)
item.setStartAngle(start_angle)
item.setSpanAngle(span_angle)
self.finish(color, item)
def finish(self, color, item):
pen = QPen()
pen.setBrush(QBrush(color))
item.setPen(pen)
item.setFlags(QGraphicsItem.ItemIsMovable |
QGraphicsItem.ItemIsSelectable)
self.scene.addItem(item)
def main():
app = QApplication(sys.argv)
screen = app.screens()[0]
dpi = screen.physicalDotsPerInch()
f = factor = dpi/25.4
# data to draw
start_angle = int(0*16)
alpha = 121.081
span_angle = int(alpha*16)
r0 = 148.660
r1 = 74.330
circles = [
(-r0*factor, -r0*f, r0*f*2, start_angle, span_angle, Qt.green),
(-r1*factor, -r1*f, r1*f*2, start_angle, span_angle, Qt.green),
]
# draw geometry
GD = GeometryDraw(ellipses=circles)
# print
scene = GD.scene
try:
#scene.addRect(QRectF(0, 0, 800, 1000), QPen(Qt.black),
# QBrush(Qt.green))
printer = QPrinter()
if QPrintDialog(printer).exec() == QDialog.Accepted:
painter = QPainter(printer)
painter.setRenderHint(QPainter.Antialiasing)
scene.render(painter)
except AttributeError:
pass
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Eine PDF-Datei wird erstellt, leider erhalte ich beim Versuch die Datei zu öffnen eine Fehlermeldung "Datei kann nicht geöffnet werden".
Vielleicht fällt Euch auf, welchen Fehler ich dabei gemacht habe.
Ich habe die mit und ohne scene.addRect versucht.
Grüße Nobuddy