我确实在父面板中找到SetDoubleBuffered(True)
可以解决闪烁问题(主要来自wx.StaticText
),但是当您对列进行排序时,它会减慢整个UI,尤其是ObjectListView
元素。所以我搜索了一下,根据https://wiki.wxwidgets.org/Flicker-Free_Drawing,摆脱wx.StaticText
的背景擦除应该做的工作:
class NoFlickeringTxtCtrl(wx.StaticText):
def __init__(self, parent, id=-1, label="", pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0, name="staticText"):
wx.StaticText.__init__(self, parent, id, label, pos, size,
style, name)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnErase)
def OnErase(self, evt):
evt.Skip()
但遗憾的是它不起作用,所以我想知道是否有更好的方法来避免wx.StaticText
的闪烁?
答案 0 :(得分:0)
据我所知,你的代码不摆脱背景擦除。要做到这一点,您必须将evt.Skip()
替换为pass
。
如果这也不起作用,请尝试放弃EVT_ERASE_BACKGROUND
的父面板的StaticText
(这有助于我在EVT_PAINT
上绘制面板时摆脱闪烁