当前位置: 代码迷 >> python >> wxPython-PaintDC不刷新
  详细解决方案

wxPython-PaintDC不刷新

热度:28   发布时间:2023-07-16 10:31:07.0

 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() 

此代码仅在高度小于宽度时才绘制测试矩形,否则窗口应保持清晰。 但是,如果您想改变窗口的大小,除非将面板移出窗口,否则实际上不会重绘面板。 我究竟做错了什么?

您可以绑定一个方法来处理wx.EVT_SIZE或面板并使该面板无效。 或者,只需将用于面板。

的文档声称,绘制时取决于窗口的尺寸可能会有些复杂。 我不知道幕后到底发生了什么。 我按照链接上的建议进行操作,并将调用self.Refresh()添加到onPaint()的顶部,这似乎提供了所需的行为。 有关工作代码的更有效示例,请参见mghie的答案。