2011-03-14 96 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