问题描述
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()
此代码仅在高度小于宽度时才绘制测试矩形,否则窗口应保持清晰。
但是,如果您想改变窗口的大小,除非将面板移出窗口,否则实际上不会重绘面板。
我究竟做错了什么?
1楼
您可以绑定一个方法来处理wx.EVT_SIZE
或面板并使该面板无效。
或者,只需将用于面板。
2楼
的文档声称,绘制时取决于窗口的尺寸可能会有些复杂。
我不知道幕后到底发生了什么。
我按照链接上的建议进行操作,并将调用self.Refresh()
添加到onPaint()
的顶部,这似乎提供了所需的行为。
有关工作代码的更有效示例,请参见mghie的答案。