【问题标题】:SlideTransition in Kivy - slide direction failsKivy 中的 SlideTransition - 滑动方向失败
【发布时间】:2017-10-26 11:28:23
【问题描述】:

我在 Kivy 中使用 SlideTransition 时遇到了滑动方向问题。在实现特定于按钮的滑动方向时,方向似乎只是偶尔正常工作。但是,在其他情况下它会失败。

要重现问题,请随意使用以下代码:

main.py:

from kivy.app import App # Use of fields and methods of Kivy
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

class Screen1(Screen):
    pass

class Screen2(Screen):
    pass

class Screen3(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("style.kv")

class MyApp(App):
    def build(self):
        return presentation

myApp = MyApp()
myApp.run()

style.kv:

#: import SlideTransition kivy.uix.screenmanager.SlideTransition

ScreenManagement:
    transition: SlideTransition()
    Screen1:
    Screen2:
    Screen3:

<Screen1>:
    name: "screen1"
    FloatLayout:
        Label:
            text: "Screen 1"
            pos_hint: {"top": 1.0}
        Button:
            on_release: 
                app.root.current = "screen2"
                app.root.transition = SlideTransition(direction="left")
            size_hint: 0.5, 0.8/3
            pos_hint: {"bottom": 0.8, "left": 1}
            text: "Screen 2 (slide left)"
            font_size: 30

<Screen2>:
    name: "screen2"

    FloatLayout:
        Label:
            text: "Screen 2"
            pos_hint: {"top": 1.0}

        Button:
            on_release: 
                app.root.current = "screen1"
                app.root.transition = SlideTransition(direction="right")
            size_hint: 0.5, 0.8/3
            pos_hint: {"top": 0.8, "right": 1}
            text: "Screen 1 (slide right)"
            font_size: 30

        Button:
            on_release:
                app.root.current = "screen3"
                app.root.transition = SlideTransition(direction="left")
            size_hint: 0.5, 0.8/3
            pos_hint: {"top": 0.8, "left": 1}
            text: "Screen 3 (slide left)"
            font_size: 30

<Screen3>:
    name: "screen3"

    FloatLayout:
        Label:
            text: "Screen 3"
            pos_hint: {"top": 1.0}
        Button:
            on_release: 
                app.root.current = "screen1"
                app.root.transition = SlideTransition(direction="right")
            size_hint: 0.5, 0.8/3
            pos_hint: {"top": 0.8, "left": 1}
            text: "Screen 1 (slide right)"
            font_size: 30

我遇到了以下问题:单击第一张幻灯片中的“幻灯片 2”和第二张幻灯片中的“幻灯片 3”后,两者都按指定向左消失,单击第三张幻灯片中的“幻灯片 1”会导致滑动方向“左”,虽然指定的方向是“右”。似乎有什么东西覆盖了滑动方向?

有没有人遇到过类似的问题并且知道如何解决?提前致谢!

【问题讨论】:

    标签: python-3.x kivy kivy-language


    【解决方案1】:

    问题

    屏幕在给定方向之前显示。因此,它使用了之前的幻灯片过渡方向,即向左。你在几个地方有同样的问题。

    Button:
        on_release: 
            app.root.current = "screen1"
            app.root.transition = SlideTransition(direction="right")
    

    解决方案

    先设置Slide Transition方向,再设置current为想要的屏幕名称。详情请参考示例。

    Button:
        on_release:
            app.root.transition = SlideTransition(direction="right")
            app.root.current = "screen1"
    

    示例

    style.kv

    #:import SlideTransition kivy.uix.screenmanager.SlideTransition
    
    ScreenManagement:
        transition: SlideTransition()
        Screen1:
        Screen2:
        Screen3:
    
    <Screen1>:
        name: "screen1"
        FloatLayout:
            Label:
                text: "Screen 1"
                pos_hint: {"top": 1.0}
            Button:
                on_release:
                    app.root.transition = SlideTransition(direction="left")
                    app.root.current = "screen2"
                size_hint: 0.5, 0.8/3
                pos_hint: {"bottom": 0.8, "left": 1}
                text: "Screen 2 (slide left)"
                font_size: 30
    
    <Screen2>:
        name: "screen2"
    
        FloatLayout:
            Label:
                text: "Screen 2"
                pos_hint: {"top": 1.0}
    
            Button:
                on_release:
                    app.root.transition = SlideTransition(direction="right")
                    app.root.current = "screen1"
                size_hint: 0.5, 0.8/3
                pos_hint: {"top": 0.8, "right": 1}
                text: "Screen 1 (slide right)"
                font_size: 30
    
            Button:
                on_release:
                    app.root.transition = SlideTransition(direction="left")
                    app.root.current = "screen3"
                size_hint: 0.5, 0.8/3
                pos_hint: {"top": 0.8, "left": 1}
                text: "Screen 3 (slide left)"
                font_size: 30
    
    <Screen3>:
        name: "screen3"
    
        FloatLayout:
            Label:
                text: "Screen 3"
                pos_hint: {"top": 1.0}
            Button:
                on_release:
                    app.root.transition = SlideTransition(direction="right")
                    app.root.current = "screen1"
                size_hint: 0.5, 0.8/3
                pos_hint: {"top": 0.8, "left": 1}
                text: "Screen 1 (slide right)"
                font_size: 30
    

    【讨论】:

    • 我明白了!谢谢你的回答,我的错!
    猜你喜欢
    • 2021-09-18
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多