问题描述
所以我正在使用 Kivy 制作一个应用程序。我的一个屏幕有数量不确定的按钮,因此使用 for 循环通过 main.py 文件添加它们。我的代码是这样的:
class CategWin(Screen):
@mainthread
def on_enter(self,**kwargs):
for i in range(10):
button = Button(text="B_" + str(i),color=(1,1,1),background_normal="button1.png",background_down="button2.png")
self.ids.menu.add_widget(button)
class ChannelWin(Screen):
***some code***
pass
class WindowManager(ScreenManager):
pass
kv = Builder.load_file("my.kv")
class MyMainApp(App):
def build(self):
return kv
if __name__ == "__main__":
MyMainApp().run()
on_release:
app.root.current = "screen_name"
root.manager.transition.direction = "right"
分配切换屏幕命令,但如何通过 main.py 文件来完成?
我也尝试了 documentation 中提到的 switch_to()
函数,但它返回此错误。
##Code:
button.bind(on_press=WindowManager.switch_to(ChannelWin))
TypeError: switch_to() missing 1 required positional argument: 'screen'
我对 kivy 很陌生,所以我迷路了。我在网上也找不到任何解决方案。
解决方法
你可以这样做:
class CategWin(Screen):
@mainthread
def on_enter(self,**kwargs):
for i in range(10):
button = Button(text="B_" + str(i),color=(1,1,1),background_normal="button1.png",background_down="button2.png")
button.bind(on_press=self.go_to_Channelwin)
self.ids.menu.add_widget(button)
def go_to_Channelwin(self,pressed_button):
self.manager.current = "ChannelWin_screen_name"
其中 ChannelWin_screen_name
被您分配给 name
实例的任何 ChannelWin
替换。
在您的回调定义中,您可以使用带有 WindowManager.switch_to
属性的 python 内置函数,而不是使用 WindowManager.current
函数。
setattr(WindowManager,'current','screen_name')