如何通过 main.py 文件访问 ScreenManager 命令?

问题描述

所以我正在使用 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()

一个类具有上述功能。在 kv 文件中,您可以使用

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