четверг, 14 октября 2010 г.

wx.PaintDC не перерисовывает картинку

Очень интересный эффект, а точнее ошибка, получилась у меня при отрисовке на форме (wx.Frame) с помощью wx.PaintDC. Вот код события wx.EVT_PAINT, который использовался сначала:

def on_paint(self, evt):
self.dc = wx.PaintDC(self)
self.dc.DrawBitmap(self.background, 0,0, True)

Как вы уже, наверное догадались данные манипуляции ведутся с целью отрисовки фона окна, а точнее само окно в форме картинки. Пример можно подсмотреть в wx.Demo -> Miscellaneous -> ShapedWindow. Так вот, такой код приводит к тому, что, если деактивировать окно (произойдет событие ex.EVT_ACTIVATE), и потом опять активировать (это же событие), то контролы внутри окна не отрисуются. Теперь посмотрим на код, который работает правильно:

def on_paint(self, evt):
dc = wx.PaintDC(self)
dc.DrawBitmap(self.background, 0,0, True)

Как видите, проблема решилась тем, что мы не делаем контекст атрибутом окна. Почему так? Хороший вопрос, и ответ на него пока не знаю, не углублялся, так как особо нет времени. Но если кто знает ответ на этот вопрос, милости прошу в комментарии.

Комментариев нет:

Отправить комментарий

В этом гаджете обнаружена ошибка