wxPython之解决闪烁

解决闪烁

  闪烁发生在重绘窗口导致用户界面可见的闪动。甚至简单的绘制程序,如果使用不当的话,都是导致闪烁。
幸运的是有一些方法来解决和最小化闪烁,这会提高程序界面的外观和感觉。

1、避免不必要的背景擦除

   发生闪烁时,首先尝试避免不必要的擦除。通过绑定一个空的事件处理器给EVT_ERASE_BACKGROUND事件来实现。绑定一个空事件处理器阻止系统擦除背景,当在OnPaint
中再次绘制时,将会覆盖已经存在的背景。这样在EVT_ERASE_BACKGROUND和EVT_PAINT之间,背景不会闪烁成白色。

self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnErase)

def OnErase(self, event):
    # Do nothing, reduces flicker by removing
    # unneeded background erasures and redraws
    pass

2、使用缓冲的PaintDC

  在OnPaint中使用一个BufferedPaintDC,所有单独的绘制步骤都在屏幕之外进行,绘制完成一步到位地显示在
屏幕上。这种方法能够很好地减少闪烁,因为屏幕仅在单个变化中更新替代了不用缓冲DC直接绘制到屏幕上更新很多次。

def OnPaint(self, event):
    """Draw the image on to the panel"""
    # Create a Buffered PaintDC
    dc = wx.BufferedPaintDC(self)

3、尽可能较少刷新区域

  最后一个方式是只重绘界面的一小部分。它能用在当一个控件由于某个状态变化需要手动重绘自己的一部分。比如,一个控件拥有文本和图片,如果控件有鼠标在上面改变字体颜色的行为,可以使用rect参数来指定重绘文本区域。

self.Refresh(rect=RectToUpdate)

你可能感兴趣的:(Python)