Kivy:通过on_press事件更改屏幕管理器中的屏幕 [英] Kivy: Changing screens in screen manager with an on_press event

查看:75
本文介绍了Kivy:通过on_press事件更改屏幕管理器中的屏幕的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如何使用绑定到按钮的on_press事件而不使用KV文件/KV语言来更改屏幕.

I would like to know how to change screens using an on_press event binded to a button, without using a KV file/KV language.

我已阅读过Kivy文档,但只能使用KV文件查找解决方案.

I have read through the Kivy documentation, but have only been able to find solutions using a KV file.

示例:

on_press: root.manager.current = 'screen2'

我还可以使用以下方法在主python文件中更改屏幕:

I can also change the screen in the main python file using:

screenmanager.current = 'screen2'

但是我不知道如何使用按钮来实现相同的目的.

But I cant figure out how to achieve the same using a button.

推荐答案

一种简单的方法是定义您自己的按钮子类:

One simple way to accomplish this is to define your own button subclass:

class ScreenButton(Button):
    screenmanager = ObjectProperty()
    def on_press(self, *args):
        super(ScreenButton, self).on_press(*args)
        self.screenmanager.current = 'whatever'

按下按钮时会自动调用on_press方法,因此将更改屏幕管理器的current属性.

The on_press method is automatically called when the button is pressed, so the screenmanager's current property will be changed.

然后,您可以输入类似以下内容的代码:

Then you can have code something like:

sm = ScreenManager()

sc1 = Screen(name='firstscreen')
sc1.add_widget(ScreenButton(screenmanager=sm))

sc2 = Screen(name='whatever')
sc2.add_widget(Label(text='another screen'))

sm.add_widget(sc1)
sm.add_widget(sc2)

单击按钮应根据需要切换屏幕.

Clicking the button should switch the screens as required.

另一种方法(可能是kv语言实际上是如何做到的)将是手动使用bind方法.

Another way (which is probably how kv language actually does it) would be to manually use the bind method.

def switching_function(*args):
    some_screen_manager.current = 'whatever'

some_button.bind(on_press=switching_function)

这意味着每按一次some_button就会调用switching_function.当然,在定义函数的方式和时间方面,这里有很多灵活性,因此(例如)您可以执行更通用的操作,例如将screenmanager传递给函数的第一个参数.

This would mean that switching_function is called whenever some_button is pressed. Of course there is a lot of flexibility here regarding how and when you define the function, so (for instance) you could do something more general like pass the screenmanager as the first argument to the function.

我没有测试此代码,它也不是完整的应用程序,但希望含义很清楚.两种方法都可以正常工作,您可以选择最明智的方法.以后我可能会构建一个更完整的示例.

I didn't test this code and it isn't a complete app, but hopefully the meaning is clear. Either method should work fine, you can choose the way that seems most sensible. I might construct a more complete example later.

这篇关于Kivy:通过on_press事件更改屏幕管理器中的屏幕的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆