我有一个wx.Dialog,我有子类。在这个对话框中,我在DC& amp;我也有自己的wx.Timer,它每100个时钟步进一次循环。
现在发生的事情是当我启动我的wx.Timer时说,self.timer.Start(100),它正确地每100个时钟步进循环但是它每隔100个时钟将wx.EVT_PAINT消息发送到对话框步骤不是wx.EVT_TIMER消息?
从下面的示例中可以很容易看到&如果您运行它,您将看到字符串“Got Paint”始终打印&永远不会打印“Got Timer”(永远不会收到wx.EVT_TIMER事件?)
为什么这样做?我该如何解决?
import wx
class dlg( wx.Dialog ):
def __init__( self, _parent ):
wx.Dialog.__init__( self, parent=_parent, id=wx.ID_ANY )
self.Show()
self.w = wx.Timer( self )
self.Bind( wx.EVT_TIMER, self.on_timer, self.w )
self.Bind( wx.EVT_PAINT, self.on_paint )
self.w.Start(100)
def on_timer( self, event ):
print "Got Timer"
raw_input()
def on_paint( self, event ):
print "Got Paint"
raw_input()
class Frame( wx.Frame ):
def __init__( self, _parent ):
wx.Frame.__init__( self, parent=_parent, id=wx.ID_ANY )
self.Bind( wx.EVT_CLOSE, self.on_close )
self.w = dlg( self )
def on_close( self, event ):
self.Close( True )
self.Destroy()
if __name__ == "__main__":
app = wx.App(False)
frame = Frame( None )
frame.Show()
app.MainLoop()
答案 0 :(得分:1)
如果您使用的是Windows,则问题是您没有在EVT_PAINT处理程序中创建wx.PaintDC。当控件在发送该事件后返回到寡妇时,它会感觉到窗口仍然存在无效区域,因此它会立即发送另一个具有更高优先级的绘制事件,这最终会使所有其他事件挨饿,因此看起来没有计时器事件正在在你的例子中发送。
如果您不在Windows上,请提供更多详细信息。