为什么WxPythons运动检测如此之慢?

Jes*_*ose 8 python wxpython

我设置了on_motion处理EVT_MOTION.我希望鼠标位置以交互方式生成特定于坐标的图像,但是WxPython 在注册连续的运动事件时有大约400ms的延迟.这使界面变得迟钝.

为什么EVT_MOTION这么慢,我该如何解决?我在Ubuntu 11.10和WinXP中试过它,延迟是可比的吗?

我需要快速响应时间来从图像中选择一部分,如图所示.就目前而言,"十字线"跟随鼠标的速度太慢.

在此输入图像描述

这是我试过的代码EVT_MOTION:

def on_motion(self, event):
    """mouse in motion"""
    #pt = event.GetPosition()
    self.mouseover_location = event.GetPosition()
    self.t2 = time.time()
    print "delay",self.t2 - self.t1
    self.t1 = self.t2

delay 0.379776954651
delay 0.00115919113159
delay 0.421130895615
delay 0.416938066483
delay 0.376848936081
delay 0.387464046478
delay 0.40311384201
delay 0.392899036407
delay 0.385301113129
delay 0.422554969788
delay 0.355197906494
Run Code Online (Sandbox Code Playgroud)

Inf*_*y77 3

目前的问题是不完整的,因为没有示例应用程序来演示该问题。但是,我想说运动处理程序与您的问题无关,因为很可能您在后续运动处理程序之间执行一些昂贵的操作(例如刷新整个绘图画布)。

如果是这种情况(并且您可以轻松检查您的绘画例程是否在鼠标运动事件之间被调用),我建议如下:

  1. 如果您自己绘制内容,请确保您使用双缓冲(通过 wx.BufferedPaintDC);
  2. 如果确实在鼠标运动之间调用了绘制例程,请尝试仅刷新绘图的损坏部分(通过 RefreshRect);
  3. 使用 wx.Overlay 绘制矩形选区(有一些演示可以说明如何做到这一点);
  4. 发布一个小型的、可运行的示例应用程序来演示该问题。