【问题标题】:(Kivy Python) Resetting ScreenManager Screen Direction After Instance(Kivy Python) 实例后重置 ScreenManager 屏幕方向
【发布时间】:2017-07-09 17:18:56
【问题描述】:

我试图弄清楚如何仅在 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')

我想知道这个动画发生后如何将方向重置为左。如果我用

跟随屏幕变化
self.manager.transition.direction = 'left'

然后它只是将方向留在 BackFunction 内部

谢谢

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    我认为最好在每次更改current 属性时定义direction 属性。但是,您可以做任何您想做的事情,将函数绑定到 on_complete 事件并在函数本身内取消绑定:

    示例:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多