如何在 Kivy 中重置小部件

How to reset widget in Kivy

我有一个非常简单的应用程序,只有一个按钮和一个标签。标签最初的值为 0。每次按下按钮,标签增加 1。当标签变为 3 时,我会显示一个带有 "play again" 按钮的弹出窗口。

现在,我想将标签重置为 0。

我的尝试:

#!/usr/bin/kivy
import kivy
kivy.require('1.7.2')

from random import random
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.popup import Popup
from random import random
from random import choice
from kivy.properties import StringProperty
import time
from kivy.clock import Clock

s=0

def my_callback(dt):
    mypopup = MyPopup()
    return mypopup.show_popup()

def go_to_main(self):
    sm.current = 'menu'
    global s
    s=0

def test(self):
    global s
    s=0
    print s

class MyPopup(Popup): 
    def show_popup(self):
        mytext= str(s)
        content = BoxLayout(orientation="vertical")
        content.add_widget(Label(text="Game Over", font_size=20))
        content.add_widget(Label(text="Score", font_size=20))
        content.add_widget(Label(text=mytext, font_size=20))
        mybutton_cancel = Button(text="Play Again", size_hint_y=None, height=40)
        content.add_widget(mybutton_cancel)
        mypopup = Popup(content = content,              
            title = "oops",     
            auto_dismiss = False,         
            size_hint = (.5, .5))
        mybutton_cancel.bind(on_release=mypopup.dismiss)
        mybutton_cancel.bind(on_release=test) 
        mypopup.open()

Builder.load_string("""
<MenuScreen>:
    GridLayout:
        cols: 1
        Button:
            id: btn_0
            text: "press me to increase score"
            on_press: root.val0()
        Label:
            id: score
            text:root.get_score()
""")

class MenuScreen(Screen):
    def get_score(self):
        return str(s)
    #on_click of button code
    def val0(self):
        global s
        s=s+1
        self.ids['score'].text=str(s)
        if(s==3):
            Clock.schedule_once(my_callback, 0)

sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))

class TestApp(App):

    def build(self):
        return sm

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

它成功重置为 0,我将它打印在控制台上进行检查,但仍然显示为 3。按下按钮时,更改为 1。我想将其显示为 0 而不是 3。

抓住你的 MenuScreen 对象

# sm.add_widget(MenuScreen(name='menu')) # Replace this line with these two:
menu_screen = MenuScreen(name='menu')
sm.add_widget(menu_screen)

然后,在 test 函数中,调用您的 menu_screen val0 函数

def test(self):
    global s
    s=-1
    menu_screen.val0()