如何使用 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 中切换屏幕的主要内容,如果未能解决你的问题,请参考以下文章