我正在Kivy制作一个多屏幕游戏。在主屏幕上,我们有一组按钮,每个按钮的背景常规属性设置为png图像。每个按钮指向用户回答问题的单独屏幕。一旦问题得到解答,问题屏幕就会引导用户返回主屏幕。我们想要做的是更新按钮的颜色(使用不同的png文件作为背景)以向用户指示问题已被回答。
现在我们在主屏幕中创建了一个方法,可以在正确回答背景屏幕中的问题时更改背景颜色。通过打印到终端,我们已经能够确认颜色已经改变。但是,当应用程序返回主屏幕时,颜色尚未更改。我们认为这是因为主屏幕在用户返回时被重置。在主屏幕上制作按钮颜色的正确方法是什么,不仅取决于在单独屏幕上回答的问题,还要永久性?
谢谢!
答案 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()