如何使用 python 代码在 Kivy 中切换屏幕

Posted

技术标签:

【中文标题】如何使用 python 代码在 Kivy 中切换屏幕【英文标题】:How to switch screens in Kivy using the python code 【发布时间】:2021-10-13 07:33:38 【问题描述】:

我的代码在另一个 python 文件中有屏幕管理器和 App 类。我想通过按下按钮将窗口从“order_screen”更改为“order_review”。我可以在我的 kv 代码中实现这种效果(参见第二个代码)

class SubmitAll(Screen):
    Price = Price()
    new_list = []
    Order = Order_full()
    ordered_products =[]
    order = StringProperty(str(ordered_products))
    ReviewLayout = ReviewLayout()

    def __init__(self, **kwargs):
        Screen.__init__(self, **kwargs)
        b = Button(text="submit")
        b.bind(on_press=lambda x: self.submit_all())
#       b.bind(on_press=self.changer)
        self.add_widget(b)

    def submit_all(self):
        pass


    def changer(self,*args):
        self.manager.current = 'order_review'
        print('yes')

如果我在 kv 中制作按钮并使用 on_press: app.root.current 它可以完美运行,但是我无法在 python 文件中获得相同的结果。

<Order_Review@Screen>:
    name: "order_review"
    ReviewLayout:

<SubmitAll>:
    name: "submission"
    GridLayout:
        cols:1


        Button:
            text: "Submit All"
            on_press: root.submit_all()

            on_release:
                app.root.current = "order_review"

我尝试使用更改器方法来实现这一点,但是我得到了错误

AttributeError: 'NoneType' 对象没有属性 'current'

如何在我的 python 代码中使用 app.root.current 复制我在 kv 代码中获得的相同效果?(这基本上是通过单击按钮切换屏幕)

------------编辑 屏幕管理器 kv:

WindowManager:
    one: one

    MainWindow:
    Order_Page:
        id: one

    SubmitAll:
    Order_Review:

屏幕管理类:

class WindowManager(ScreenManager):
    def switching_function(*args):
        WindowManager.current = 'review'

该类在另一个 python 文件中(主要是其他所有东西都被导入的文件)

【问题讨论】:

没有足够的信息来确定发生了什么。你在用ScreenManager吗? 检查新的编辑 【参考方案1】:

尝试将switching_function() 更改为:

class WindowManager(ScreenManager):
    def switching_function(*args):
        self.current = 'order_review'

【讨论】:

这对任何能力有什么帮助,我需要按下按钮来切换屏幕,我什至不使用那种方法,我可以直接输入 pass 代替? 将你的Button绑定到这个方法。 哦,哇,我把它移到了我需要的类而不是窗口管理器中,并且它进行了一些修改!【参考方案2】:

将此添加到我的班级


   def switching_function(self, *args):
        self.parent.parent.current = 'order_review'

并将其绑定到我的按钮上


        self.b = Button(text= 'button')
        self.b.bind(on_press=lambda x: self.switching_function())
        self.add_widget(self.b)

效果很好,但我不确定是什么决定了我需要根据具体情况使用多少父母。

【讨论】:

以上是关于如何使用 python 代码在 Kivy 中切换屏幕的主要内容,如果未能解决你的问题,请参考以下文章

在 Kivy 中使用切换按钮绑定函数

如何在回调时在 Kivy 布局之间切换?

kivy如何切换屏幕?

为啥切换屏幕在 kivy 中不起作用?

(Kivy Python)在 .py 文件中按下按钮时切换屏幕

如何在 Kivy 中从 python 代码更改屏幕