【发布时间】:2009-06-25 20:42:18
【问题描述】:
在我的基于 wx.Frame 的 wxpython 应用程序中,当某些事件发生时,我通过在需要时创建 wx.ClientDC 实例在面板上绘制一些线条。唯一的问题是,如果窗口被最小化然后恢复,线条就会消失!是否有某种我应该重写的方法或绑定的事件将允许我在恢复窗口时调用我创建的绘图方法?
谢谢!
【问题讨论】:
在我的基于 wx.Frame 的 wxpython 应用程序中,当某些事件发生时,我通过在需要时创建 wx.ClientDC 实例在面板上绘制一些线条。唯一的问题是,如果窗口被最小化然后恢复,线条就会消失!是否有某种我应该重写的方法或绑定的事件将允许我在恢复窗口时调用我创建的绘图方法?
谢谢!
【问题讨论】:
您必须绘制的唯一位置是 wx.EVT_PAINT,因此请在面板的 init 中绑定到该事件,例如
self.Bind(wx.EVT_PAINT, self._onPaint)
在_onPaint中,使用wx.PaintDC来绘制例如
dc = wx.PaintDC(self)
dc.DrawLine(0,0,100,100)
【讨论】:
当窗口恢复时,它(在某些平台上)使用 EVT_PAINT 处理程序重新绘制。
解决方案是例如在 OnPaint() 中绘制相同的线条。或者缓冲你画的东西。请参阅 wxBufferedDC 类。
【讨论】: