Двойная буферизация с помощью wxpython
Я работаю над многоплатформенным приложением с помощью wxpython, и у меня были проблемы с проблесками в окнах, а на панели - панель.
Раньше я рисовал буфер (wx.Bitmap) во время событий движения мыши, а мой метод OnPaint состоял только из строки:
dc = wx.BufferedPaintDC(self, self.buffer)
Довольно стандартный, но все же у меня были проблескивающие проблемы в Windows, в то время как все отлично работало в Linux.
I решил мою проблему, вызвав SetDoubleBuffered(True)
в методе __init__
.
Странно, что теперь все работает, даже если я больше не использую BufferedPaintDC. Я изменил свое приложение так, чтобы вся часть чертежа была сделана в методе OnPaint. Я не использую буфер, а чертеж выполняется непосредственно на wx.PaintDC без каких-либо мерцающих проблем.
Итак, мой вопрос: BufferedPaintDC абсолютно бесполезен? Или как-то не рекомендуется? Я являюсь владельцем книги "WxPython in Action" (2006) и даже не упоминает SetDoubleBuffered
Ответы
Ответ 1
Существует высокая вероятность того, что SetDoubleBuffered фактически заставит вашу панель использовать буфер с буферизацией автоматически, в документации не упоминается, что эти классы устарели (и я скорее думаю, что если бы это было так).
О wxPython в действии... 2006 год был давным-давно... возможно, что метод SetDoubleBuffered не существовал тогда или что автор хотел показать, как все работает на более низком уровне.