Heute wollte ich mit Qt geometrische Formen zeichnen. Folgender Code zum Zeichnen eines Rechtecks funktioniert noch.
Rechteck.py:
Code: Alles auswählen
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QBrush, QPen
from PyQt5 import QtCore
class MainWindow(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self)
self.pen = QPen(QtCore.Qt.red) # Außenliniefarbe
self.pen.setWidth(5) # Außenliniendicke
self.brush = QBrush(QtCore.Qt.blue) # Füllfarbe
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(self.pen)
painter.setBrush(self.brush)
painter.drawRect(50, 50, 200, 200)
def main():
app = QApplication(sys.argv)
main_window = MainWindow(app)
main_window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Im nächsten Schwierigkeitsgrad wollte ich dann Punktobjekte, die auf einer Kreisbahn angeordnet sind, mittels einer for-Schleife erstellen und zeichnen. Punktobjekte werden laut `print(points)` mit dem folgenden Code zwar erstellt, aber es erscheinen keine Punkte im `MainWindow`.
Punkte.py
Code: Alles auswählen
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QBrush
from PyQt5 import QtCore
import math
import sys
points = []
circle_points = 30
point_color = QtCore.Qt.red
point_diameter = 20
circle_diameter = 500
class MainWindow(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self)
self.setGeometry(0,0,800,800)
for i in range(circle_points):
angle = (360 / circle_points * i)
point = Point(self, angle, point_color, point_diameter, circle_diameter)
points.append(point)
print(points)
class Point(QWidget):
def __init__(self, main_window, angle, point_color, point_diameter, circle_diameter):
super().__init__()
self.main_window = main_window
self.x_center = self.width() / 2
self.y_center = self.height() / 2
self.point_color = point_color
self.point_diameter = point_diameter
self.circle_diameter = circle_diameter
self.angle = angle
self.brush = QBrush(self.point_color)
def paintEvent(self, event):
painter = QPainter(self.main_window)
painter.setBrush(self.brush)
x = self.x_center + (self.circle_diameter / 2 * math.cos(math.radians(self.angle)))
y = self.y_center + (self.circle_diameter / 2 * math.sin(math.radians(self.angle)))
x1 = int(x - self.point_diameter)
y1 = int(y - self.point_diameter)
x2 = int(x + self.point_diameter)
y2 = int(y + self.point_diameter)
print("Test")
painter.drawEllipse(x1, y1, x2, y2)
def main():
app = QApplication(sys.argv)
main_window = MainWindow(app)
main_window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
- Die Anweisung `print("Test")` wird gar nicht ausgeführt. Wo liegt der oder die Fehler?
- Warum braucht man zum Zeichnen eigentlich die Methode `paintEvent(self, event)`? Von den über Google gefundenen Erklärungen habe ich nur verstanden, dass damit wohl die Methode `paintEvent` der Klasse `QWidget` überschrieben wird.
Atalanttore