import sys
import math
from PyQt6.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsItem, QGraphicsRectItem, QGraphicsEllipseItem, QGraphicsTextItem, QGraphicsItemGroup
from PyQt6.QtCore import Qt, QTimer, QRectF, QPropertyAnimation, QPointF, QEasingCurve, QObject, pyqtProperty
from PyQt6.QtGui import QPainter, QPen, QColor, QBrush, QFont
class Wheel(QGraphicsItemGroup):
def __init__(self, x, y, radius):
super().__init__()
self.radius = radius
# Outer Circle
circle = QGraphicsEllipseItem(-radius, -radius, 2*radius, 2*radius)
circle.setBrush(QBrush(QColor("black")))
circle.setPen(QPen(QColor("gray"), 2))
self.addToGroup(circle)
# Spokes (10)
for i in range(10):
angle = i * (360 / 10)
spoke = QGraphicsRectItem(-1, -radius, 2, 2*radius)
spoke.setBrush(QBrush(QColor("gray")))
spoke.setRotation(angle)
self.addToGroup(spoke)
self.setPos(x, y)
def rotate(self, angle):
for item in self.childItems():
item.setRotation(item.rotation() + angle)
class Car(QGraphicsItemGroup):
def __init__(self):
super().__init__()
# Rectangle
self.rect = QGraphicsRectItem(0, 0, 200, 80)
self.rect.setBrush(QBrush(QColor("brown")))
self.rect.setPen(QPen(QColor("darkred"), 3))
self.addToGroup(self.rect)
# Text
self.text = QGraphicsTextItem("I LOVE PYTHON")
self.text.setFont(QFont("Arial", 12, QFont.Weight.Bold))
self.text.setDefaultTextColor(QColor("white"))
self.text.setPos(20, 25)
self.addToGroup(self.text)
# Wheels
self.wheel1 = Wheel(40, 80, 20)
self.wheel2 = Wheel(160, 80, 20)
self.addToGroup(self.wheel1)
self.addToGroup(self.wheel2)
# Animation
self.timer = QTimer()
self.timer.timeout.connect(self.animate_wheels)
self.timer.start(50)
def animate_wheels(self):
self.wheel1.rotate(10)
self.wheel2.rotate(10)
class AnimationView(QGraphicsView):
def __init__(self):
super().__init__()
self.scene = QGraphicsScene(0, 0, 800, 300)
self.setScene(self.scene)
self.setRenderHint(QPainter.RenderHint.Antialiasing)
self.car = Car()
self.scene.addItem(self.car)
# Move forward
self.anim = QPropertyAnimation(self.car, b"pos")
self.anim.setDuration(5000)
self.anim.setStartValue(QPointF(-200, 100))
self.anim.setEndValue(QPointF(800, 100))
self.anim.setLoopCount(-1)
self.anim.start()
if __name__ == "__main__":
app = QApplication(sys.argv)
view = AnimationView()
view.show()
sys.exit(app.exec())
Tidak ada komentar:
Posting Komentar