下面,我有一个框架内的面板。为什么我不能画到画板上?我只看到一块纯白色的屏幕。如果我去掉面板,直接画到画框上…就行了。任何帮助都将不胜感激。在
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None,-1,'window',(200,200),(600,600))
self.Center()
self.panel=wx.Panel(self)
self.panel.SetBackgroundColour('white')
self.firstpoint=wx.Point(300,300)
self.secondpoint=wx.Point(400,400)
self.Bind(wx.EVT_PAINT,self.onPaint)
def onPaint(self,event):
dc=wx.PaintDC(self.panel)
dc.DrawLine(self.firstpoint.x,self.firstpoint.y,
self.secondpoint.x,self.secondpoint.y)
尝试将事件绑定到面板,而不是整个框架:
你的版本对我来说有点用(windows),但它不断刷新面板,所以它会占用整个处理器。在
根据文档: 请注意,在paint事件处理程序中,应用程序必须始终创建wxPaintDC对象,即使您不使用它。否则,在MS Windows下,此窗口和其他窗口的刷新将出错。
在这里,您收到了整个帧的绘制事件,但对面板使用了dc。在
编辑:这个http://wiki.wxpython.org/self.Bind%20vs.%20self.button.Bind很好地解释了为什么这不起作用:
^{pr2}$在这种情况下,从不调用onPaint处理程序。在
我正在寻找一个完整的wx Python控件的完整工作示例,该控件子类
wx.Panel
并在其自身上进行自定义绘制,但我找不到任何一个。多亏了这个(和其他)问题,我终于找到了一个最小的工作示例——我将在这里发布,因为它确实显示了“在框架内绘制面板”;除了与OP不同的是,框架在面板上绘制图形——这里,面板自己绘制(而坐在框架中)。在代码会产生这样的结果:
。。。基本上,当你调整窗口大小时,红色矩形会被重新绘制。在
注意代码注释,特别是OnSize中需要Refresh()以避免损坏的呈现/闪烁。在
MWE代码:
相关问题 更多 >
编程相关推荐