BF Summer sales
Pouze tento týden sleva až 80 % na HTML & CSS a JavaScript
80 % bodů zdarma na online výuku díky naší Letní akci!

Lekce 6 - Animace a ScatterLayout v Kivy a Pythonu

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 6x (1.07 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

Předchozí článek
Aplikace Čtečka Knih v Kivy a Pythonu
Všechny články v sekci
Kivy - Mobilní aplikace v Pythonu
Článek pro vás napsal MQ .
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
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í!