2009-02-24 20 views
10

Pracuję na wieloplatformowej aplikacji z wxpython i miałem migotanie problemów w oknach, podczas rysowania na panelu. użyłem do rysowania na buforze (wx.Bitmap) podczas ruchami myszy wydarzeń i moja metoda OnPaint składała się z zaledwie na linii:Podwójne buforowanie z wxpythonem

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

dość standardowy, ale wciąż miałem migotanie problemów w systemie Windows, podczas gdy wszystko działało w porządku w systemie Linux.

I rozwiązałem mój problem dzwoniąc pod numer SetDoubleBuffered(True) w metodzie .

Dziwne jest to, że teraz wszystko działa, nawet jeśli nie używam już BufferedPaintDC. Zmieniłem aplikację tak, aby cała część rysunkowa została wykonana w metodzie OnPaint. Nie używam bufora, a rysowanie odbywa się bezpośrednio na wx.PaintDC bez żadnych problemów z migotaniem.

Moje pytanie brzmi: czy BufferedPaintDC jest całkowicie bezużyteczny? Lub w jakiś sposób przestarzałe? Jestem właścicielem książki "WxPython in Action" (2006) i nawet nie wspomniałem SetDoubleBuffered

Odpowiedz

5

Istnieje duże prawdopodobieństwo, że SetDoubleBuffered faktycznie sprawi, że twój panel będzie używał buforowanego dc automatycznie, dokumentacja nie wspomnieć, że te klasy są przestarzałe (i raczej sądzę, że gdyby tak było).

O wxPython w akcji ... 2006 było dawno temu ... Możliwe, że metoda SetDoubleBuffered nie istniała wtedy lub że autor chciał pokazać, jak działa na niższym poziomie.