aboutsummaryrefslogtreecommitdiffstats
path: root/examples/widgets/animation/animatedtiles/animatedtiles.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/widgets/animation/animatedtiles/animatedtiles.py')
-rw-r--r--examples/widgets/animation/animatedtiles/animatedtiles.py242
1 files changed, 107 insertions, 135 deletions
diff --git a/examples/widgets/animation/animatedtiles/animatedtiles.py b/examples/widgets/animation/animatedtiles/animatedtiles.py
index b15635185..02fc75bf5 100644
--- a/examples/widgets/animation/animatedtiles/animatedtiles.py
+++ b/examples/widgets/animation/animatedtiles/animatedtiles.py
@@ -1,58 +1,31 @@
+# Copyright (C) 2010 Riverbank Computing Limited.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#############################################################################
-##
-## Copyright (C) 2010 Riverbank Computing Limited.
-## Copyright (C) 2016 The Qt Company Ltd.
-## Contact: http://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python examples of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:BSD$
-## You may use this file under the terms of the BSD license as follows:
-##
-## "Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions are
-## met:
-## * Redistributions of source code must retain the above copyright
-## notice, this list of conditions and the following disclaimer.
-## * Redistributions in binary form must reproduce the above copyright
-## notice, this list of conditions and the following disclaimer in
-## the documentation and/or other materials provided with the
-## distribution.
-## * Neither the name of The Qt Company Ltd nor the names of its
-## contributors may be used to endorse or promote products derived
-## from this software without specific prior written permission.
-##
-##
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from PySide2 import QtCore, QtGui, QtWidgets
-
-import animatedtiles_rc
+import sys
+import math
+
+from PySide6.QtCore import (QEasingCurve, QObject, QParallelAnimationGroup,
+ QPointF, QPropertyAnimation, QRandomGenerator,
+ QRectF, QTimer, Qt, Property, Signal)
+from PySide6.QtGui import (QBrush, QLinearGradient, QPainter,
+ QPainterPath, QPixmap, QTransform)
+from PySide6.QtWidgets import (QApplication, QGraphicsItem, QGraphicsPixmapItem,
+ QGraphicsRectItem, QGraphicsScene, QGraphicsView,
+ QGraphicsWidget, QStyle)
+from PySide6.QtStateMachine import QState, QStateMachine
+
+import animatedtiles_rc # noqa: F401
# Deriving from more than one wrapped class is not supported, so we use
# composition and delegate the property.
-class Pixmap(QtCore.QObject):
+class Pixmap(QObject):
def __init__(self, pix):
- super(Pixmap, self).__init__()
+ super().__init__()
- self.pixmap_item = QtWidgets.QGraphicsPixmapItem(pix)
- self.pixmap_item.setCacheMode(QtWidgets.QGraphicsItem.DeviceCoordinateCache)
+ self.pixmap_item = QGraphicsPixmapItem(pix)
+ self.pixmap_item.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
def set_pos(self, pos):
self.pixmap_item.setPos(pos)
@@ -60,40 +33,40 @@ class Pixmap(QtCore.QObject):
def get_pos(self):
return self.pixmap_item.pos()
- pos = QtCore.Property(QtCore.QPointF, get_pos, set_pos)
+ pos = Property(QPointF, get_pos, set_pos)
-class Button(QtWidgets.QGraphicsWidget):
- pressed = QtCore.Signal()
+class Button(QGraphicsWidget):
+ pressed = Signal()
def __init__(self, pixmap, parent=None):
- super(Button, self).__init__(parent)
+ super().__init__(parent)
self._pix = pixmap
self.setAcceptHoverEvents(True)
- self.setCacheMode(QtWidgets.QGraphicsItem.DeviceCoordinateCache)
+ self.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
def boundingRect(self):
- return QtCore.QRectF(-65, -65, 130, 130)
+ return QRectF(-65, -65, 130, 130)
def shape(self):
- path = QtGui.QPainterPath()
+ path = QPainterPath()
path.addEllipse(self.boundingRect())
return path
def paint(self, painter, option, widget):
- down = option.state & QtWidgets.QStyle.State_Sunken
+ down = option.state & QStyle.State_Sunken
r = self.boundingRect()
- grad = QtGui.QLinearGradient(r.topLeft(), r.bottomRight())
- if option.state & QtWidgets.QStyle.State_MouseOver:
- color_0 = QtCore.Qt.white
+ grad = QLinearGradient(r.topLeft(), r.bottomRight())
+ if option.state & QStyle.State_MouseOver:
+ color_0 = Qt.white
else:
- color_0 = QtCore.Qt.lightGray
+ color_0 = Qt.lightGray
- color_1 = QtCore.Qt.darkGray
+ color_1 = Qt.darkGray
if down:
color_0, color_1 = color_1, color_0
@@ -101,12 +74,12 @@ class Button(QtWidgets.QGraphicsWidget):
grad.setColorAt(0, color_0)
grad.setColorAt(1, color_1)
- painter.setPen(QtCore.Qt.darkGray)
+ painter.setPen(Qt.darkGray)
painter.setBrush(grad)
painter.drawEllipse(r)
- color_0 = QtCore.Qt.darkGray
- color_1 = QtCore.Qt.lightGray
+ color_0 = Qt.darkGray
+ color_1 = Qt.lightGray
if down:
color_0, color_1 = color_1, color_0
@@ -114,7 +87,7 @@ class Button(QtWidgets.QGraphicsWidget):
grad.setColorAt(0, color_0)
grad.setColorAt(1, color_1)
- painter.setPen(QtCore.Qt.NoPen)
+ painter.setPen(Qt.NoPen)
painter.setBrush(grad)
if down:
@@ -122,7 +95,7 @@ class Button(QtWidgets.QGraphicsWidget):
painter.drawEllipse(r.adjusted(5, 5, -5, -5))
painter.drawPixmap(-self._pix.width() / 2, -self._pix.height() / 2,
- self._pix)
+ self._pix)
def mousePressEvent(self, ev):
self.pressed.emit()
@@ -132,128 +105,127 @@ class Button(QtWidgets.QGraphicsWidget):
self.update()
-class View(QtWidgets.QGraphicsView):
+class View(QGraphicsView):
def resizeEvent(self, event):
super(View, self).resizeEvent(event)
- self.fitInView(self.sceneRect(), QtCore.Qt.KeepAspectRatio)
+ self.fitInView(self.sceneRect(), Qt.KeepAspectRatio)
if __name__ == '__main__':
+ app = QApplication(sys.argv)
- import sys
- import math
-
- app = QtWidgets.QApplication(sys.argv)
+ kinetic_pix = QPixmap(':/images/kinetic.png')
+ bg_pix = QPixmap(':/images/Time-For-Lunch-2.jpg')
- kineticPix = QtGui.QPixmap(':/images/kinetic.png')
- bgPix = QtGui.QPixmap(':/images/Time-For-Lunch-2.jpg')
-
- scene = QtWidgets.QGraphicsScene(-350, -350, 700, 700)
+ scene = QGraphicsScene(-350, -350, 700, 700)
items = []
for i in range(64):
- item = Pixmap(kineticPix)
- item.pixmap_item.setOffset(-kineticPix.width() / 2,
- -kineticPix.height() / 2)
+ item = Pixmap(kinetic_pix)
+ item.pixmap_item.setOffset(-kinetic_pix.width() / 2,
+ -kinetic_pix.height() / 2)
item.pixmap_item.setZValue(i)
items.append(item)
scene.addItem(item.pixmap_item)
# Buttons.
- buttonParent = QtWidgets.QGraphicsRectItem()
- ellipseButton = Button(QtGui.QPixmap(':/images/ellipse.png'), buttonParent)
- figure8Button = Button(QtGui.QPixmap(':/images/figure8.png'), buttonParent)
- randomButton = Button(QtGui.QPixmap(':/images/random.png'), buttonParent)
- tiledButton = Button(QtGui.QPixmap(':/images/tile.png'), buttonParent)
- centeredButton = Button(QtGui.QPixmap(':/images/centered.png'), buttonParent)
-
- ellipseButton.setPos(-100, -100)
- figure8Button.setPos(100, -100)
- randomButton.setPos(0, 0)
- tiledButton.setPos(-100, 100)
- centeredButton.setPos(100, 100)
-
- scene.addItem(buttonParent)
- buttonParent.setTransform(QtGui.QTransform().scale(0.75, 0.75))
- buttonParent.setPos(200, 200)
- buttonParent.setZValue(65)
+ button_parent = QGraphicsRectItem()
+ ellipse_button = Button(QPixmap(':/images/ellipse.png'), button_parent)
+ figure_8button = Button(QPixmap(':/images/figure8.png'), button_parent)
+ random_button = Button(QPixmap(':/images/random.png'), button_parent)
+ tiled_button = Button(QPixmap(':/images/tile.png'), button_parent)
+ centered_button = Button(QPixmap(':/images/centered.png'), button_parent)
+
+ ellipse_button.setPos(-100, -100)
+ figure_8button.setPos(100, -100)
+ random_button.setPos(0, 0)
+ tiled_button.setPos(-100, 100)
+ centered_button.setPos(100, 100)
+
+ scene.addItem(button_parent)
+ button_parent.setTransform(QTransform().scale(0.75, 0.75))
+ button_parent.setPos(200, 200)
+ button_parent.setZValue(65)
# States.
- rootState = QtCore.QState()
- ellipseState = QtCore.QState(rootState)
- figure8State = QtCore.QState(rootState)
- randomState = QtCore.QState(rootState)
- tiledState = QtCore.QState(rootState)
- centeredState = QtCore.QState(rootState)
+ root_state = QState()
+ ellipse_state = QState(root_state)
+ figure_8state = QState(root_state)
+ random_state = QState(root_state)
+ tiled_state = QState(root_state)
+ centered_state = QState(root_state)
# Values.
+ generator = QRandomGenerator.global_()
+
for i, item in enumerate(items):
# Ellipse.
- ellipseState.assignProperty(item, 'pos',
- QtCore.QPointF(math.cos((i / 63.0) * 6.28) * 250,
- math.sin((i / 63.0) * 6.28) * 250))
+ ellipse_state.assignProperty(item, 'pos',
+ QPointF(math.cos((i / 63.0) * 6.28) * 250,
+ math.sin((i / 63.0) * 6.28) * 250))
# Figure 8.
- figure8State.assignProperty(item, 'pos',
- QtCore.QPointF(math.sin((i / 63.0) * 6.28) * 250,
- math.sin(((i * 2)/63.0) * 6.28) * 250))
+ figure_8state.assignProperty(item, 'pos',
+ QPointF(math.sin((i / 63.0) * 6.28) * 250,
+ math.sin(((i * 2) / 63.0) * 6.28) * 250))
# Random.
- randomState.assignProperty(item, 'pos',
- QtCore.QPointF(-250 + QtCore.qrand() % 500,
- -250 + QtCore.qrand() % 500))
+ random_state.assignProperty(item, 'pos',
+ QPointF(-250 + generator.bounded(0, 500),
+ -250 + generator.bounded(0, 500)))
# Tiled.
- tiledState.assignProperty(item, 'pos',
- QtCore.QPointF(((i % 8) - 4) * kineticPix.width() + kineticPix.width() / 2,
- ((i // 8) - 4) * kineticPix.height() + kineticPix.height() / 2))
+ width = kinetic_pix.width()
+ height = kinetic_pix.height()
+ tiled_state.assignProperty(item, 'pos',
+ QPointF(((i % 8) - 4) * width + width / 2,
+ ((i // 8) - 4) * height + height / 2))
# Centered.
- centeredState.assignProperty(item, 'pos', QtCore.QPointF())
+ centered_state.assignProperty(item, 'pos', QPointF())
# Ui.
view = View(scene)
view.setWindowTitle("Animated Tiles")
- view.setViewportUpdateMode(QtWidgets.QGraphicsView.BoundingRectViewportUpdate)
- view.setBackgroundBrush(QtGui.QBrush(bgPix))
- view.setCacheMode(QtWidgets.QGraphicsView.CacheBackground)
- view.setRenderHints(
- QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
+ view.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
+ view.setBackgroundBrush(QBrush(bg_pix))
+ view.setCacheMode(QGraphicsView.CacheBackground)
+ view.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
view.show()
- states = QtCore.QStateMachine()
- states.addState(rootState)
- states.setInitialState(rootState)
- rootState.setInitialState(centeredState)
+ states = QStateMachine()
+ states.addState(root_state)
+ states.setInitialState(root_state)
+ root_state.setInitialState(centered_state)
- group = QtCore.QParallelAnimationGroup()
+ group = QParallelAnimationGroup()
for i, item in enumerate(items):
- anim = QtCore.QPropertyAnimation(item, b'pos')
+ anim = QPropertyAnimation(item, b'pos')
anim.setDuration(750 + i * 25)
- anim.setEasingCurve(QtCore.QEasingCurve.InOutBack)
+ anim.setEasingCurve(QEasingCurve.InOutBack)
group.addAnimation(anim)
- trans = rootState.addTransition(ellipseButton.pressed, ellipseState)
+ trans = root_state.addTransition(ellipse_button.pressed, ellipse_state)
trans.addAnimation(group)
- trans = rootState.addTransition(figure8Button.pressed, figure8State)
+ trans = root_state.addTransition(figure_8button.pressed, figure_8state)
trans.addAnimation(group)
- trans = rootState.addTransition(randomButton.pressed, randomState)
+ trans = root_state.addTransition(random_button.pressed, random_state)
trans.addAnimation(group)
- trans = rootState.addTransition(tiledButton.pressed, tiledState)
+ trans = root_state.addTransition(tiled_button.pressed, tiled_state)
trans.addAnimation(group)
- trans = rootState.addTransition(centeredButton.pressed, centeredState)
+ trans = root_state.addTransition(centered_button.pressed, centered_state)
trans.addAnimation(group)
- timer = QtCore.QTimer()
+ timer = QTimer()
timer.start(125)
timer.setSingleShot(True)
- trans = rootState.addTransition(timer.timeout, ellipseState)
+ trans = root_state.addTransition(timer.timeout, ellipse_state)
trans.addAnimation(group)
states.start()
- sys.exit(app.exec_())
+ sys.exit(app.exec())