使用kivy中的Clock



我是移动应用程序开发部分的新手。我尝试使用kivy.clock.clock来安排一项任务,该任务在我创建的简单应用程序中的标签中的当前文本(整数(上添加1。我只需要每三秒更新一次标签中的值。标签文本的起始值为4。此外,当我按下应用程序中的按钮时,我还需要打印标签中的当前值。但是,它不起作用。有人能帮我找出我犯的错吗?我将在下面的main.py和my.kv文件中发布整个代码。

主.py

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.properties import ObjectProperty
from kivy.clock import Clock
class MyGrid(Widget):
txtLbl = ObjectProperty(None)
bTn = ObjectProperty(None)
def on_start(self):
Clock.schedule_interval(self.printNum, 3)
def printNum(self, *args):
self.txtLbl.text = str(int(self.txtLbl.text)+1)
def myFunc(self):
print('Current number in Label is ', self.txtLbl.text)
class MyApp(App):
def build(self):
return MyGrid()
if __name__ == '__main__':
MyApp().run()

code in my.kv
=============

<MyGrid>:
GridLayout:
txtLbl:txtlbl
bTn:btn
size:root.width-100, root.height-100
pos:50, 50
cols:1
Label:
id:txtlbl
text:'4'
GridLayout:
cols:1
Button:
text:'Print current number'
id:btn
on_press:root.myFunc()

以下是您的代码的修改版本,可以实现我认为您想要的功能:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.clock import Clock
kv = '''
<MyGrid>:
txtLbl:txtlbl
bTn:btn
GridLayout:
size:root.width-100, root.height-100
pos:50, 50
cols:1
Label:
id:txtlbl
text:'4'
GridLayout:
cols:1
Button:
text:'Print current number'
id:btn
on_press:root.myFunc()
'''
class MyGrid(Widget):
txtLbl = ObjectProperty(None)
bTn = ObjectProperty(None)
def on_start(self):
Clock.schedule_interval(self.printNUm, 3)
def printNum(self, *args):
self.txtLbl.text = str(int(self.txtLbl.text)+1)
def myFunc(self):
print('Current number in Label is ', self.txtLbl.text)
def update(self, dt):
self.txtLbl.text = str(int(self.txtLbl.text) + 1)
class MyApp(App):
def build(self):
Builder.load_string(kv)
mygrid = MyGrid()
Clock.schedule_interval(mygrid.update, 3)
return mygrid
if __name__ == '__main__':
MyApp().run()

注意,kv中的txtLbl:txtlblbTn:btn已经向上移动,使得它们对应于MyGrid类的txtLbl = ObjectProperty(None)bTn = ObjectProperty(None)

Clock用于每3秒调度一次update方法。该方法通过将Label的值增加一来更新其文本。

我使用Builder.load_string()只是为了自己方便。

最新更新