Sabtu, 11 April 2026

Python QT Animation

 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: