2011-03-14 100 views
2

我正在试图制作一个数字时钟。其中一个问题是显示屏会“闪烁”。换句话说,在这种情况下,wx.StaticText小部件(self.ST)将在非常短的时间内变为空白。我相信其原因可能会发现它的根本在于如何自我更新(即SetLabel())。有没有办法提供更平滑的过渡,以阻止闪烁?wxPython静态文本部件“闪烁”

这是self.ST更新功能:我想你可以使用wx.Timer代替 请检查wxPython的演示

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) 

回答

1

会发生什么事,它需要多个显示器刷新以更新文本,或者发生在关于hsync的恰当时间。

就这样,StaticText不会给你处理这个问题所需的低级控制。

你可以做的是使用BufferedDCDrawText,或者可以看看LEDNumberCtrl

+1

** **不正确。正如@ Oleksiy的回答所描述的,你只需要在'StaticText'的父对象上调用'.SetDoubleBuffered(True)'。 – 2014-01-22 03:36:15

3

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

+1

这解决了这个问题。另一个答案(做你自己的绘图)对于这个问题来说太过分了。你也可以在面板上直接调用'SetDoubleBuffered',而不必重写初始值设定项。 'self.statusReadoutPanel.SetDoubleBuffered(真)'。 – 2014-01-22 03:35:05