如何在使用screenmanager时更新kivy中的背景正常属性

时间:2014-03-20 17:15:33

标签: mobile kivy

我正在Kivy制作一个多屏幕游戏。在主屏幕上,我们有一组按钮,每个按钮的背景常规属性设置为png图像。每个按钮指向用户回答问题的单独屏幕。一旦问题得到解答,问题屏幕就会引导用户返回主屏幕。我们想要做的是更新按钮的颜色(使用不同的png文件作为背景)以向用户指示问题已被回答。

现在我们在主屏幕中创建了一个方法,可以在正确回答背景屏幕中的问题时更改背景颜色。通过打印到终端,我们已经能够确认颜色已经改变。但是,当应用程序返回主屏幕时,颜色尚未更改。我们认为这是因为主屏幕在用户返回时被重置。在主屏幕上制作按钮颜色的正确方法是什么,不仅取决于在单独屏幕上回答的问题,还要永久性?

谢谢!

1 个答案:

答案 0 :(得分:1)

ScreenManager中保留对使用root.question按下的按钮的引用。您可以从屏幕上访问它。您可以使用自己的图像或附加的图像。

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen


Builder.load_string("""
<MyScreenManager>
    Screen:
        name: 'questionary'
        BoxLayout:
            orientation: 'vertical'
            Button:
                text: 'Question 1'
                on_press: root.question = self; root.current = 'question_1'
                background_normal: 'answered.png'
            Button:
                text: 'Question 2'
                on_press: root.question = self; root.current = 'question_1'
                background_normal: 'answered.png'
    Screen:
        name: 'question_1'
        BoxLayout:
            orientation: 'vertical'
            Label:
                text: 'Are you going to answer this question?'
            Button:
                text: 'Yes'
                on_press: root.question.background_normal = 'not_answered.png'; root.current = 'questionary'
""")


class MyScreenManager(ScreenManager):
    pass

class TestApp(App):
    def build(self):
        return MyScreenManager()

if __name__ == '__main__':
    TestApp().run()

answered not_answered.jpg