wxPython的StaticText控件闪烁问题

4 投票
3 回答
1771 浏览
提问于 2025-04-16 13:38

我正在尝试制作一个数字时钟。其中一个问题是显示会“闪烁”。换句话说,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 个回答

0

我觉得你可以试试用 wx.Timer。可以去看看 wxpython 的示例,还有这个 wx.Timer 类 的介绍。

9

解决闪烁问题的一种方法是在你的小部件的顶层容器中启用双缓冲。通常,你可以在初始化的时候,比如在你的 StaticText 类的 Panel 容器里,调用 self.SetDoubleBuffered(True) 来实现这个设置。

1

发生的情况是,更新文本需要多个显示器刷新,或者更新的时机不太合适,这和水平同步(hsync)有关。

目前,StaticText 并不能让你进行足够底层的控制来处理这个问题。

你可以尝试使用BufferedDCDrawText,或者看看LEDNumberCtrl

撰写回答