2011-03-14 4 views
2

디지털 시계를 만들려고합니다. 디스플레이의 문제점 중 하나는 디스플레이가 "깜박"합니다. 즉, wx.StaticText 위젯 (이 경우 self.ST)은 매우 짧은 기간 동안 비어있게됩니다. 나는 그 원인이 어떻게 뿌리 내릴 수 있다고 믿는다. self.ST 업데이트 (즉, SetLabel()). 깜박임을 멈추기 위해 더 부드러운 전환을 제공 할 수있는 방법이 있습니까? 무엇을 어떻게하는 것이 걸리는 것입니다wxPython StaticText 위젯 "깜박임"

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

:

self.ST가 업데이트 기능입니다 텍스트를 업데이트하기 위해 하나 이상의 모니터를 새로 고치거나 hsync과 관련하여 부적절한 시간에 발생합니다.

그대로, StaticText은이 문제를 처리하는 데 필요한 낮은 수준의 제어 기능을 제공하지 않습니다.

할 수있는 일은 BufferedDCDrawText을 사용하거나 LEDNumberCtrl을 살펴 보는 것입니다.

+1

** ** ** 잘못된 것입니다. @ Oleksiy의 대답에 따르면,'StaticText'의 부모 객체에'.SetDoubleBuffered (True)'를 호출하면됩니다. –

0

내가 대신 wxPython을 데모를 확인하시기 바랍니다 wx.Timer을 사용할 수있다 생각하고 wx.Timer-class

3

깜박임을 수정하는 한 가지 방법은 위젯의 상단 컨테이너에서 이중 버퍼링을 사용하는 것입니다. 일반적으로이 초기화자는 클래스의 경우 Panel 컨테이너 내에서 self.SetDoubleBuffered(True)을 호출하여 수행됩니다.

+1

이 문제가 해결되었습니다. 다른 대답 (자신의 그림을 그리는 것)은 문제에 대한 총체적인 과잉입니다. 패널에서 직접'SetDoubleBuffered'를 호출 할 수도 있습니다. 예를 들어 이니셜 라이저를 오버라이드해야합니다. 'self.statusReadoutPanel.SetDoubleBuffered (참)'. –