如何解决如何在 kivy 小部件上模拟用户操作? 按示例单击按钮
我想模拟用户操作,在查看文档后,我看到了 Clock.schedule_once(my_callback,1)
。
.
问题:这是唯一的方法吗?我更喜欢 my_button.press()
之类的东西。
.
我想按下按钮然后,它会调用my_callback
,我不想直接调用my_callback
。
(因为如果我这样做并且我的回调发展,我失去了很好的参考)
PS:我看到可以使用 Clock.create_trigger(my_callback)
,但在这里似乎不是很好的解决方案。
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.clock import Clock
KV_APP = '''
BoxLayout:
Button:
id: my_button
text: "Click on me"
'''
class TestApp(MDApp):
def build(self):
self.screen = Builder.load_string(KV_APP)
self.screen.ids["my_button"].bind(on_press=self.on_button_click)
event = Clock.schedule_once(self.on_button_click,1)
return self.screen
def on_button_click(self,instance):
print("hello there !")
if __name__ == '__main__':
TestApp().run()
解决方法
您可以创建一个 Event
并发送它。下面是一个例子:
from kivy.app import App
from kivy.clock import Clock
from kivy.input.providers.mouse import MouseMotionEvent
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
class MyBoxLayout(BoxLayout):
def mydispatchAnEvent(self,*args):
# create and dispatch a fake event
touch = MouseMotionEvent(None,123,(123,456)) # args are device,id,spos
touch.button = 'left'
touch.pos = (321,654)
self.dispatch('on_touch_down',touch)
theRoot = Builder.load_string('''
MyBoxLayout:
orientation: 'vertical'
Label:
text: 'Button below should demonstrate receiving touch event'
Button:
text: 'Waiting for event'
on_press: print('touched')
''')
class EventDispatcherPlayApp(App):
def build(self):
Clock.schedule_once(theRoot.mydispatchAnEvent,2)
return theRoot
EventDispatcherPlayApp().run()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。