【问题标题】:Kivy: Moving mouse freeze main loopKivy:移动鼠标冻结主循环
【发布时间】:2020-06-26 19:40:16
【问题描述】:

我有一个视频播放器应用程序,它下面有一个图表显示。我的视频播放器定期获取帧,但是当我移动鼠标时它会冻结,通过打印正在发生的事情我可以看到主循环没有调用任何东西

我尝试为每个小部件on_mouse_pos 事件打印一些文本,但没有一个被触发,所以我真的不知道我应该去哪里看。使用记录器模块,我可以看到没有鼠标事件,所以我什至不确定鼠标事件是记录器

我现在有几个小部件,所以我不确定在此处发布它们是否有用,但我很想听听反馈或有关此问题的任何想法

非常感谢

【问题讨论】:

  • 没有看到一些代码很难掌握你的特殊情况,
  • 通过整个窗口获取鼠标位置:Window.bind(mouse_pos=your_call_back_here)
  • 嗯,我现在有几个文件和十几个小部件,所以我不确定我应该发布什么。最重要的是,我在我的小部件的每个 on_mouse_pos 上添加了一个显示,但是当我的鼠标移动时它们都不会被触发,所以我不确定是谁在捕捉它......
  • 既然您评论说您的程序正在不断地获取帧,我感觉帧获取循环可能会干扰 kivy 事件循环,从而在执行需要很长时间才能响应的事情时阻塞接口或使用循环,您应该使用线程和时钟事件以避免阻塞 gui。
  • 我使用了一个队列系统,它填充在一个单独的线程中,并且我的小部件与时钟模块一起调度以定期拉取它们。然而,我怀疑我是否正确使用了@mainthread 装饰器

标签: python python-3.x kivy kivy-language


【解决方案1】:

所以我能够解决这个问题,我的框架拉动功能在一个单独的线程中,将它移动到一个周期性触发的时钟事件中解决了这个问题。 我仍然不确定为什么会发生这个错误,我的 2 美分是 opencv 在读取帧时阻塞了 GIL,这在某种程度上干扰了 kivy 管理其事件的方式

【讨论】:

  • 是的,不过要等到明天才能完成
猜你喜欢
  • 2015-08-13
  • 2018-03-31
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2020-12-15
  • 2020-08-06
  • 1970-01-01
相关资源
最近更新 更多