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)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值