Вот модифицированная версия вашего кода, которая делает то, что, я думаю, вы хотите:
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()
Обратите внимание, что txtLbl:txtlbl
и bTn:btn
в kv
были перемещены вверх, чтобы они соответствует txtLbl = ObjectProperty(None)
и bTn = ObjectProperty(None)
класса MyGrid
.
Clock
используется для планирования метода update
каждые 3 секунды. Этот метод обновляет текст Label
, увеличивая его значение на единицу.
Я использовал Builder.load_string()
только для собственного удобства.