我知道在.kv文件中切换屏幕相对容易。但是,我希望在.py文件中保留我的按钮创建,所以我不想使用这个方法。我已经做了以下添加的功能,当第14个按钮被按下。当在程序中按下按钮时,什么都不会发生。尝试使用其他名称让屏幕sm.电流引发错误:“kivy.uix.屏幕管理器.ScreenManagerException:当按下第14个按钮时,没有名为“InputScreen”的屏幕
# Kivy Formatting
kv_text='''\
<MyScreenManager>:
LandingScreen:
InputScreen:
<InputScreen@Screen>:
name: 'input_sc'
AnchorLayout:
id: anchor_1
<LandingScreen@Screen>:
name: 'landing_sc'
GridLayout:
id: grid_1
cols: 5
height: 480
width: 800
spacing: 25, 20
padding: 25,25
'''
# Screen Manager
class MyScreenManager(ScreenManager):
pass
# Main screen with button layout
class LandingScreen(Screen):
def __init__(self, **kwargs):
super(LandingScreen, self).__init__(**kwargs)
self.buttons = [] # add references to all buttons here
Clock.schedule_once(self._finish_init)
# IDs have to be used here because they cannot be applied until widget initialized
def _finish_init(self, dt):
self.ids.grid_1.cols = 5
# Loop to make 15 different buttons on screen
for x in range(15):
self.buttons.append(Button(text='button {}'.format(x)))
self.ids.grid_1.add_widget(self.buttons[x])
self.buttons[x].background_normal = 'YOUTUBE.png'
def SwitchScreen(self,*args):
sm.current = 'input_sc'
sm = ScreenManager()
sm.add_widget(InputScreen(name='input_sc'))
sm.add_widget(LandingScreen(name='landing'))
self.buttons[14].bind(on_release=SwitchScreen)
# Input screen
class InputScreen(Screen):
pass
class MySubApp(App):
def build(self):
return MyScreenManager()
def main():
Builder.load_string(kv_text)
app = MySubApp()
app.run()
if __name__ == '__main__':
main()
如果有人能帮我理解我目前逻辑上的漏洞,我将不胜感激。谢谢。在
每个屏幕都有一个^{} 属性,该属性为您提供所使用的
ScreenManager
的实例。您只需使用它来引用ScreemManager
实例并使用其current
方法:相关问题 更多 >
编程相关推荐