我想在单击按钮后立即启动 30 秒计时器。
我的尝试:
#!/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
t=30
check=0
def my_callback(dt):
global t
t=t-1
self.ids['timer'].text=str(t)
Builder.load_string("""
<MenuScreen>:
GridLayout:
cols: 1
Button:
id: btn_0
text: "press me to start timer"
on_press: root.val0()
Label:
text:'timer'
Label:
id: timer
text:str(30)
""")
class MenuScreen(Screen):
def val0(self):
global check
if(check==0):
check=check+1
Clock.schedule_interval(my_callback, 1)
sm = ScreenManager()
menu_screen = MenuScreen(name='menu')
sm.add_widget(menu_screen)
class TestApp(App):
def build(self):
return sm
if __name__ == '__main__':
TestApp().run()
我无法弄清楚如何使用 kivy 时钟更改标签上的数据。目前我收到错误,表明 self 未定义。请指教。
错误是因为你引用了 self,但是这个isn't在 my_callback 函数中定义,您必须将其作为参数传递。
一种方便的方法是使用 functools.partial。您可以将时钟调度替换为:
from functools import partial
Clock.schedule_interval(partial(my_callback, self), 1)
并将 my_callback 声明为
def my_callback(screen, dt):
global t
t -= 1
screen.ids.timer.text = str(t)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)