Двойная буферизация с помощью wxpython

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

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

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

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам