wxPython的StaticText窗口小部件“闪烁”

3
我正在制作一个数字时钟。其中一个问题是显示会出现“闪烁”。换句话说,wx.StaticText小部件(在这种情况下为self.ST)会在极短的时间内变空白。我认为原因可能在于self.ST更新(即SetLabel())的方式。是否有一种方法可以提供更平滑的过渡,以防止闪烁?
这是更新self.ST的函数:
def tick (self):
    ''' Continually updates the time. '''

    TimeStr = '%I:%M %S %p'
    DateStr = '%A, %B %d, %Y'


    Time = time.strftime(TimeStr)
    Date = time.strftime(DateStr)

    self.TimeDate =  Time + '\t\t' + Date

    self.ST.SetLabel(Time)

    wx.CallLater(1000, self.tick)
3个回答

8

修复闪烁的一种方法是在小部件的顶级容器中启用双缓冲。通常,这是通过在初始化器中调用self.SetDoubleBuffered(True)来完成的,例如在您的StaticText类的Panel容器内。


1
这解决了问题。另一个答案(自己绘图)对于这个问题来说过于复杂了。你也可以直接在面板上调用 SetDoubleBuffered,而不需要重写初始化方法,例如 self.statusReadoutPanel.SetDoubleBuffered(True) - Fake Name

1

发生的情况是需要多次监视器刷新才能更新文本,或者在hsync方面时间不当。

目前为止,StaticText无法提供必要的低级控制来处理此问题。

您可以使用BufferedDCDrawText,或者查看LEDNumberCtrl


1
错误的。正如@Oleksiy的答案所描述的那样,您只需要在“StaticText”的父对象上调用.SetDoubleBuffered(True)即可。 - Fake Name

0

我认为你可以使用 wx.Timer 请查看 wxpython 演示和 wx.Timer-class


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接