Python Kivy时钟计划外问题
我目前正努力充分利用kivy的时钟计划外操作。我正在为按键时的回调分配一个时间表。我已经实现了执行预定回调,但是我还希望做的是,一旦按下一个键,它不仅会启动回调,还将取消任何现有的回调。我的问题是,尽管我编写了一个event.cancel(),但该事件根本没有被取消。整个程序有点大,但我可以显示直接使用时钟的代码Python Kivy时钟计划外问题,python,kivy,Python,Kivy,我目前正努力充分利用kivy的时钟计划外操作。我正在为按键时的回调分配一个时间表。我已经实现了执行预定回调,但是我还希望做的是,一旦按下一个键,它不仅会启动回调,还将取消任何现有的回调。我的问题是,尽管我编写了一个event.cancel(),但该事件根本没有被取消。整个程序有点大,但我可以显示直接使用时钟的代码 def _on_keyboard_down(self, keyboard, keycode, text, modifiers): event0 = Clock.create_t
def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
event0 = Clock.create_trigger(lambda dt: self.pressHome(), 3)
event1 = Clock.create_trigger(lambda dt: self.selectFig(coord = 'A2'), 2)
event2 = Clock.create_trigger(lambda dt: self.selectFig(coord = 'A3'), 4)
if keycode[1] == 'd':
coord = 'A3'
self.selectFig(coord)
event1()
event2()
event0.cancel()
elif keycode[1] == 'f':
coord = 'A4'
self.selectTxt(coord)
event1.cancel()
event2.cancel()
event0()
您每次都在创建新的事件,因此您不是在取消旧的事件 可能的修复方法是只创建一次触发器:
def __init__(self, **kw):
self.event0 = Clock.create_trigger(lambda dt: self.pressHome(), 3)
self.event1 = Clock.create_trigger(lambda dt: self.selectFig(coord = 'A2'), 2)
self.event2 = Clock.create_trigger(lambda dt: self.selectFig(coord = 'A3'), 4)
def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
event0 = Clock.create_trigger(lambda dt: self.pressHome(), 3)
event1 = Clock.create_trigger(lambda dt: self.selectFig(coord = 'A2'), 2)
event2 = Clock.create_trigger(lambda dt: self.selectFig(coord = 'A3'), 4)
if keycode[1] == 'd':
coord = 'A3'
self.selectFig(coord)
self.event1()
self.event2()
self.event0.cancel()
elif keycode[1] == 'f':
coord = 'A4'
self.selectTxt(coord)
self.event1.cancel()
self.event2.cancel()
self.event0()
成功了!为什么触发器需要在构造函数中?虽然它们最初是在键盘上的**下创建的,但在事件()激活它之前不会调用它们。因为您需要取消相同的事件,而不是每次调用**键盘上的**下**方法时创建的新事件