[kivy] Wie kann ich eine Animation positionieren?

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Abend,

ich spiele die letzten Abende immer mal wieder mit einer Animation in Kivy rum. Ich schaffe es jedoch nicht die Position der Animation zu verändern.
Ich habe dazu einen Code geschrieben, der nichts machen soll, außer mir ein Bild anzuzeigen und mittig darunter soll die Animation angezeigt werden.

Code: Alles auswählen

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.factory import Factory
from kivy.animation import Animation
from kivy.uix.gridlayout import GridLayout


Builder.load_string("""
<AnimWidget@Widget>:
    canvas:
        Color:
            rgba: 0.7, 0.3, 0.9, 1
        Rectangle:
            size: self.size    
    size_hint: None, None
    size: 400, 30                          

<MainScreen>:
    name: "main"
    anim_box: anim_box
    GridLayout:
        cols: 1
        rows: 1
            
        Image:
            source: 'beispielbild.png'
            size: self.size
        AnchorLayout:
            id: anim_box
            returns: root.start_test()        
""")

class MainScreen(Screen):
    def start_test(self, *args):
        anim_bar = Factory.AnimWidget()
        self.anim_box.add_widget(anim_bar)
        anim = Animation(opacity=0.3, width=100, duration=0.6)
        anim += Animation(opacity=1, width=400, duration=0.8)
        anim.repeat = True
        anim.start(anim_bar)

class TestApp(App):
    def build(self):
        screenmanager = ScreenManager()
        screenmanager.add_widget(MainScreen(name='main'))
        return screenmanager

if __name__ == '__main__':
    TestApp().run()
Es gibt für AnchorLayout die Funktion 'anchor_x' und 'anchor_y' denen man 'left', 'right' oder z.B. 'center' übergeben kann. Dadurch verändert sich meine Animation leider nicht.
Ich habe es auch mit 'pos: self.pos' odere 'pos_hint' versucht, einmal in 'AnimWidget@Widget' und auch in 'AnchorLayout'. Im Grunde habe ich, nach dem ich keine für mich brauchbaren oder funktionierende Hinweise gefunden habe, ziemlich viel Zeit mit raten totgeschlagen.
Jetzt wäre ich über einen Hinweis von euch sehr dankbar. Übersehe ich wieder das Offensichtliche?

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
poldi
User
Beiträge: 20
Registriert: Sonntag 19. April 2020, 08:35

Es kommt halt darauf an was man genau will, mit RelativeLayout könnte man ziemlich frei positionieren. Ansonsten sind die verschiedenen Layouts gut in Tutorials erklärt. Es ist halt so eine Sache in Schachteln zu denken, nicht gleich aufgeben.
Antworten