(Kivy Python)在实例之后重置屏幕管理器屏幕方向

2024-10-03 17:16:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想弄清楚如何在kivy中只改变一个特定按钮按下时的屏幕方向动画(取消按钮应该像向前导航按钮一样向右而不是向左擦除)下面是我当前正在做的事情:

# Cancel Button
        self.cancel = Button(text="Cancel", height=30, width=90,size_hint=(None, None),pos=(300, 350))
        self.cancel.bind(on_release=self.BackFunction)
        self.ids.float_web.add_widget(self.cancel)

def BackFunction(self, *args):
    self.manager.transition.direction = 'right'
    self.manager.current = ('input_sc')

我想知道在这个动画之后,如何重新设置方向。如果我跟着屏幕改变

^{pr2}$

然后它就简单地把方向左移到了反作用的内部

谢谢


Tags: textselfnone屏幕managerbutton动画方向
1条回答
网友
1楼 · 发布于 2024-10-03 17:16:03

我认为最好在每次更改current属性时定义direction属性。但是,您可以执行将函数绑定到^{}事件并在函数本身内取消绑定的操作:

示例:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen


kv_text='''\
#:import SlideTransition kivy.uix.screenmanager.SlideTransition
<MyScreenManager>:
    transition: SlideTransition()
    FirstScreen:
    LastScreen:

<FirstScreen@Screen>:
    name: 'first_sc'
    BoxLayout:
        Button:
            text: 'Next'
            on_release: root.next_screen()

<LastScreen@Screen>:
    name: 'last_sc'
    BoxLayout:
        Button:
            text: 'Previous'
            on_release: root.previous_screen()
'''

class MyScreenManager(ScreenManager):
    pass

class FirstScreen(Screen):
    def __init__(self, **kwargs):
        super(FirstScreen, self).__init__(**kwargs)

    def next_screen(self, *args):
        self.manager.current = 'last_sc'


class LastScreen(Screen):
    def __init__(self, **kwargs):
        super(LastScreen, self).__init__(**kwargs)

    def previous_screen(self, *args):
        self.manager.transition.direction = 'right'
        self.manager.current = 'first_sc'
        self.manager.transition.bind(on_complete=self.restart)

    def restart(self,  *args):
        self.manager.transition.direction = 'left'
        self.manager.transition.unbind(on_complete=self.restart)


class MySubApp(App):
    def build(self):
        return MyScreenManager()

def main():
    Builder.load_string(kv_text)
    app = MySubApp()
    app.run()

if __name__ == '__main__':
    main()

相关问题 更多 >