wxPython - PaintDC не обновляется - PullRequest
0 голосов
/ 14 февраля 2010

</p> <pre><code>import wx class TestDraw(wx.Panel): def __init__(self,parent=None,id=-1): wx.Panel.__init__(self,parent,id) self.SetBackgroundColour("#FFFFFF") self.Bind(wx.EVT_PAINT,self.onPaint) def onPaint(self, event): event.Skip() dc=wx.PaintDC(self) dc.BeginDrawing() width=dc.GetSize()[0] height=dc.GetSize()[1] if height<width: self.drawTestRects(dc) else: dc.Clear() dc.EndDrawing() def drawTestRects(self,dc): dc.SetBrush(wx.Brush("#000000",style=wx.SOLID)) dc.DrawRectangle(50,50,50,50) dc.DrawRectangle(100,100,100,100) class TestFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(640,480)) self.mainPanel=TestDraw(self,-1) self.Show(True) app = wx.App(False) frame = TestFrame(None,"Test App") app.MainLoop()

Этот код должен рисовать тестовые прямоугольники только тогда, когда высота меньше ширины, в противном случае окно должно оставаться чистым.Однако, если вы возитесь с изменением размера окна, панель фактически не перерисовывается, пока она не будет перемещена за пределы окна.Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2010

Вы можете связать метод для обработки wx.EVT_SIZE или панели и сделать его там недействительным. В качестве альтернативы просто используйте wx.FULL_REPAINT_ON_RESIZE для панели.

0 голосов
/ 14 февраля 2010

В документации для SizeEvent утверждается, что могут возникнуть некоторые сложности, когда рисование зависит от размеров окна. Я не знаю точно, что происходит за кулисами. Я последовал предложению по ссылке и добавил вызов self.Refresh() к вершине onPaint(), и это, кажется, дает желаемое поведение. См. Ответ mghie для более эффективного примера рабочего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...