我想借助此功能仅在标签上显示计数的每个增量 kivy.clock包
class MainWindow(BoxLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
count=0
def my_callback(self):
global count
count +=1
us= self.ids.tet
if count == 10:
us.text=count
return False
print("call back is called")
Clock.schedule_interval(self.my_callback, 1)
count +=1
NameError:名称“ count”未定义
答案 0 :(得分:0)
试试这个-
class MainWindow(BoxLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
def my_callback(self):
global count
count +=1
us= self.ids.tet
if count == 10:
us.text=count
return False
print("call back is called")
Clock.schedule_interval(self.my_callback, 1)
count = 0
您必须在正在创建的类之外定义count=0
,并说出global count
才能使此变量成为全局变量,这意味着现在您的函数可以在全局范围内编辑该变量。如果您想学习范围,则应该在Google上找到更多有关范围的信息。
答案 1 :(得分:0)
如何将my_callback函数绑定到按钮事件
以下代码片段显示了如何将on_press
事件绑定到回调。
Button:
text: 'Invoke method'
on_press: root.btn_callback(self)
def btn_callback(self, instance):
print(f"\nButton.text={instance.text}")
在使用Kivy Clock object来调度不使用lambda
函数的方法的调用时,必须声明一个位置参数dt
(表示增量时间)。
def my_callback(dt):
print(dt)
Clock.schedule_interval(my_callback, 1) # call callback every 1 second
或
def my_callback():
print("my_callback called")
Clock.schedule_interval(lambda dt: callback(), 1) # call callback every 1 second
下面的示例说明如何显示定义为class属性的计数器。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.properties import NumericProperty
from kivy.lang import Builder
Builder.load_string("""
<MainWindow>:
Label:
id: tet
font_size: sp(50)
Button:
text: 'Invoke method'
on_press: root.btn_callback(self)
""")
class MainWindow(BoxLayout):
count = NumericProperty(0)
def __init__(self, **kwargs):
super().__init__(**kwargs)
Clock.schedule_interval(self.my_callback, 1)
def my_callback(self, dt):
print(f"my_callback is called: count={self.count}, dt={dt}")
self.count += 1
if self.count == 10:
self.ids.tet.text = str(self.count)
def btn_callback(self, instance):
print(f"\nButton.text={instance.text}\n")
class TestApp(App):
def build(self):
return MainWindow()
if __name__ == "__main__":
TestApp().run()