Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

Lekce 6 - Animace a ScatterLayout v Kivy a Pythonu

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Zdravím vás u další lekce Pythonu a Kivy frameworku. V minulé lekci, Aplikace Čtečka Knih v Kivy a Pythonu, jsme si vytvořili aplikaci Čtečka knih a představili ScreenManager a PageLayout. V té dnešní si ukážeme jak fungují animace a ScatterLayout.

ScatterLayout

Nejdříve si ukážeme, jak funguje ScatterLayout, pro ukázku nám poslouží Rectangle uvnitř canvasu. Se čtvercem půjde volně pohybovat, rotovat a libovolně měnit jeho velikost. To vše díky multi-touch podpoře, kterou Kivy framework nabízí. Ukažme si rovnou funkční kód:

import kivy
kivy.require("1.10.1")
from kivy.uix.scatterlayout import ScatterLayout
from kivy.graphics import Rectangle
from kivy.app import App

class MujWidget(ScatterLayout):

    def __init__(self, *args, **kwargs):
        super(MujWidget, self).__init__(*args, **kwargs)
        #Vytvoříme čtverec
        self.rect = Rectangle(size=(50, 50))
        #Přidáme čtverec do canvasu
        self.canvas.add(self.rect)

class MainApp(App):
    def build(self):
        return MujWidget()

root = MainApp()
root.run()

Nyní můžeme čtvercem volně pohybovat, měnit velikost a rotovat. S myší vytvoříte multi-touch bod pravým tlačítkem.

ScatterLayout v Kivy frameworku pro Python
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Pokud budete takovouto funkcionalitu potřebovat, určitě si na ScatterLayout nyní vzpomenete.

Animace

Animace nám umožňuje změnit vlastnosti widgetu, nastavit samotné animaci dobu a také přidat efekty přechodů, tzv. transition. Seznam přechodů, které Kivy nabízí, naleznete v oficiální dokumentaci. Vytvoříme si další ukázkovou aplikaci, tentokrát využívající Animation:

import kivy
kivy.require("1.10.1")
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle
from kivy.animation import Animation
from kivy.app import App

class MujWidget(Widget):

    def __init__(self, *args, **kwargs):
        super(MujWidget, self).__init__(*args, **kwargs)
        #Vytvoříme si widget, do kterého přidáme čtverec
        self.widget = Widget(size = (50, 50), pos = (225, 225))
        self.rect = Rectangle(size = self.widget.size, pos = self.widget.pos)
        self.widget.canvas.add(self.rect)
        self.add_widget(self.widget)
        #Vytvoříme animaci, která trvá 3 sekundy
        anim = Animation(x = 500, y = 400, duration = 3)
        #Spustíme animaci s widgetem
        anim.start(self.widget)
        #Jelikož nepoužíváme Kivy Language, musíme vytvořit bind, aby se aktualizoval i čtverec
        self.widget.bind(pos = self.update, size = self.update)

    def update(self, *args):
        self.rect.pos = self.widget.pos
        self.rect.size = self.widget.size

class MainApp(App):
    def build(self):
        return MujWidget()

root = MainApp()
root.run()

Animace vypadá následovně:

Animace v Kivy frameworku pro Python

Sekvence animací

Kivy nám dovoluje vytvořit sekvenci po sobě jdoucích animací. Jako příklad nám poslouží 2 na sebe navazující animace, které se budou opakovat:

import kivy
kivy.require("1.10.1")
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle
from kivy.animation import Animation
from kivy.app import App

class MujWidget(Widget):

    def __init__(self, *args, **kwargs):
        super(MujWidget, self).__init__(*args, **kwargs)
        #Vytvoříme si widget, do kterého přidáme čtverec
        self.widget = Widget(size = (50, 50), pos = (225, 225))
        self.rect = Rectangle(size = self.widget.size, pos = self.widget.pos)
        self.widget.canvas.add(self.rect)
        self.add_widget(self.widget)
        #Vytvoříme 2 animace, které trvají každá 3 sekundy
        anim = Animation(x = 500, y = 400, duration = 3, t = "out_bounce") + Animation(x = 225, y = 225, duration = 3, t = "in_bounce")
        #Nastavíme opakování animací
        anim.repeat = True
        #Spustíme animaci s widgetem
        anim.start(self.widget)
        #Jelikož nepoužíváme Kivy Language, musíme vytvořit bind, aby se aktualizoval i čtverec
        self.widget.bind(pos = self.update, size = self.update)

    def update(self, *args):
        self.rect.pos = self.widget.pos
        self.rect.size = self.widget.size

class MainApp(App):
    def build(self):
        return MujWidget()

root = MainApp()
root.run()

Jelikož jsme přidali 2 opačné efekty, animace na sebe krásně navazují :)

Sekvence animací v Kivy frameworku pro Python

Zdrojový kód najdete ke stažení v příloze článku jako je tomu u všech lekcí. V lekci příští, Hra a reakce na stisknutí klávesy v Kivy a Pythonu, si vytvoříme hru a naučíme se jak reagovat na stisknutí klávesy.


 

Stáhnout

Staženo 2x (1.07 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

 

Aktivity (2)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!