在 Switch 处于活动状态时每 30 秒调用一次 python kivy 回调?
Calling a python kivy callback every 30 seconds while Switch is active?
我正在 python kivy 中构建一个应用程序。
我有一个开关小部件 (switch1
),当它处于活动状态时,我想每 30 秒打印一次“Hello world” .
在下面的尝试中,我首先定义了一个打印“Hello world”的回调 (switch1_callback
)。然后我用 Clock.schedule_interval()
定义了另一个调用 switch1_callback
的回调 (timely_switch1_callback
)。 timely_switch1_callback
绑定到 switch1
.
我不断收到错误消息 (TypeError: switch1_callback() takes 1 positional argument but 2 were given)
。
感谢您的帮助!
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics import Rectangle, Color
from kivy.clock import Clock
kv = '''
<PrettySwitch>:
size_hint: None, None
size: 300, 300
canvas:
Color:
rgba: 0, 0, 1, 1
Rectangle:
size: self.size
pos: self.pos
Switch:
id: switch1
pos: 150, 150
size_hint: None, None
size: 100, 50
active: True
on_active: root.timely_switch1_callback()
'''
class PrettySwitch(FloatLayout):
def switch1_callback(self):
print('Hello world')
def timely_switch1_callback(self):
Clock.schedule_interval(self.switch1_callback, 30)
class SwitchApp(App):
def build(self):
Builder.load_string(kv)
return PrettySwitch()
if __name__ == '__main__':
SwitchApp().run()
只需将 switch1_callback()
的定义更改为采用 2 个参数:
def switch1_callback(self, dt):
dt
参数由 Clock.schedule_interval()
添加。
我正在 python kivy 中构建一个应用程序。
我有一个开关小部件 (switch1
),当它处于活动状态时,我想每 30 秒打印一次“Hello world” .
在下面的尝试中,我首先定义了一个打印“Hello world”的回调 (switch1_callback
)。然后我用 Clock.schedule_interval()
定义了另一个调用 switch1_callback
的回调 (timely_switch1_callback
)。 timely_switch1_callback
绑定到 switch1
.
我不断收到错误消息 (TypeError: switch1_callback() takes 1 positional argument but 2 were given)
。
感谢您的帮助!
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics import Rectangle, Color
from kivy.clock import Clock
kv = '''
<PrettySwitch>:
size_hint: None, None
size: 300, 300
canvas:
Color:
rgba: 0, 0, 1, 1
Rectangle:
size: self.size
pos: self.pos
Switch:
id: switch1
pos: 150, 150
size_hint: None, None
size: 100, 50
active: True
on_active: root.timely_switch1_callback()
'''
class PrettySwitch(FloatLayout):
def switch1_callback(self):
print('Hello world')
def timely_switch1_callback(self):
Clock.schedule_interval(self.switch1_callback, 30)
class SwitchApp(App):
def build(self):
Builder.load_string(kv)
return PrettySwitch()
if __name__ == '__main__':
SwitchApp().run()
只需将 switch1_callback()
的定义更改为采用 2 个参数:
def switch1_callback(self, dt):
dt
参数由 Clock.schedule_interval()
添加。