Kivy的ScreenManager:switch_to似乎没有按照文档中的说明工作

时间:2018-07-23 07:21:11

标签: kivy

根据文档,上一个屏幕应从子级中删除:

  

switch_to(屏幕,**选项)¶

     

将新屏幕添加到ScreenManager并切换到它。   上一个屏幕将从子级中删除。   options是将在动画发生之前更改的过渡选项。

请参阅:https://kivy.org/docs/api-kivy.uix.screenmanager.html#kivy.uix.screenmanager.ScreenManager.switch_to

但是,当使用switch_到上一个屏幕时,似乎没有被移除。

from kivy.uix.screenmanager import ScreenManager, Screen
sm = ScreenManager()
sm.add_widget(Screen(name='menu'))
print sm.screen_names
sm.switch_to(Screen(name='settings'))
print sm.screen_names

结果:

['menu']

['menu', 'settings']

我在做什么错?还是一个错误?

编辑:我希望切换到“设置”屏幕后应删除“菜单”屏幕。但是它仍然在那里。 上一个屏幕将从子级中删除。实际上是什么意思?

1 个答案:

答案 0 :(得分:1)

删除旧屏幕是由SlideTransition的完成触发的,Screen在切换到from kivy.app import App from kivy.clock import Clock from kivy.uix.label import Label from kivy.uix.screenmanager import ScreenManager, Screen def do_print(*args): print 'After some delay: ' + str(sm.screen_names) sm = ScreenManager() class SwitchToApp(App): def build(self): scr1 = Screen(name='menu') scr1.add_widget(Label(text='menu')) sm.add_widget(scr1) print sm.screen_names Clock.schedule_once(self.do_switch_to, 1) return sm def do_switch_to(self, *args): scr2 = Screen(name='settings') scr2.add_widget(Label(text='settings')) sm.switch_to(scr2) print 'immediately after switch_to: ' + str(sm.screen_names) Clock.schedule_once(do_print, 2) if __name__ == '__main__': SwitchToApp().run() 时默认发生。由于屏幕上没有任何内容,因此不会执行任何转换,并且永远不会触发删除操作。另外,由于删除是由事件触发的,因此不会立即发生。这是一个显示预期行为的示例:

var topVal = $("p").offset().top