根据文档,上一个屏幕应从子级中删除:
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']
我在做什么错?还是一个错误?
编辑:我希望切换到“设置”屏幕后应删除“菜单”屏幕。但是它仍然在那里。 上一个屏幕将从子级中删除。实际上是什么意思?
答案 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