我是一个新手试图将一个小测试程序放在一起,我将EVT_LEFT_DOWN事件绑定到一个StaticBitmap,如下所示:
wx.EVT_LEFT_DOWN(imageBitmap, image_click_handler)
image_click处理程序看起来像这样:
image_click_handler(self):
self.Skip()
while self.LeftIsDown():
Do something
基本上,当我点击图片时,我正在尝试实现拖动。但是,self.LeftIsDown()方法永远不会返回false,这会导致无限循环。
我觉得我在做一些非常愚蠢的事情。我一直在关注这里的文档(http://www.wxpython.org/docs/api/wx.MouseEvent-class.html),这是针对较旧版本的WxPython(我使用的是3.0.0.0)。也许这是一个问题?
答案 0 :(得分:0)
wxPython是一个事件驱动的环境。当有人按下鼠标左键时,会调用您的事件处理程序,直到事件处理程序完成,其他任何事件都不会通过您的程序。您的程序无法知道按钮的释放,因为所有新事件都停留在等待处理程序返回的队列中。通常在事件处理程序中使用类似无限循环的任何东西都是危险的。
解决方案通常分为几个部分:(1)设置定时器以发送定期事件但尚未启动它。 (2)在init_click_handler中启动此计时器并返回。 (3)编写一个计时器事件处理程序,在每个事件中“执行某些操作”。 (4)当你得到一个EVT_LEFT_UP你停止计时器(另一个事件处理程序),或者你可以检查计时器事件处理程序中的LeftIsDown()并在它为假时停止计时器。