Двойная буферизация с wxpython

Я работаю над многоплатформенным приложением с wxpython, и у меня были проблемы с мерцанием в окнах при рисовании на панели. Раньше я рисовал в буфере (wx.Bitmap) во время событий движения мыши, и мой метод OnPaint состоял только из строки:

dc = wx.BufferedPaintDC(self, self.buffer)

Довольно стандартно, но все же у меня были проблемы с мерцанием в Windows, в то время как в Linux все работало нормально.

Я решил свою проблему, вызвав SetDoubleBuffered(True) в методе __init__.

Странно то, что теперь все работает, даже если я больше не использую BufferedPaintDC. Я изменил свое приложение, чтобы вся часть рисования выполнялась в методе OnPaint. Я не использую буфер, и рисование выполняется непосредственно на wx.PaintDC без каких-либо проблем с мерцанием.

Итак, мой вопрос: BufferedPaintDC совершенно бесполезен? Или как-то устарели? Я владелец книги "WxPython в действии" (2006 г.), и в ней даже не упоминается SetDoubleBuffered.


person Emiliano    schedule 24.02.2009    source источник


Ответы (1)


Существует высокая вероятность того, что SetDoubleBuffered фактически заставляет вашу панель автоматически использовать буферизованный DC, в документации не упоминается, что эти классы устарели (и я скорее думаю, что они были бы, если бы это было так).

О wxPython в действии... 2006 год был давно... возможно, что метода SetDoubleBuffered еще не существовало или автор хотел показать, как все работает на более низком уровне.

person Toni Ruža    schedule 24.02.2009