在wxPython中绘制到面板内的面板

发布于 2021-01-29 14:56:33

在下面,我在框架内部有一个面板。为什么我不能画图?我只是得到一个纯白色的屏幕。如果我摆脱了面板并直接绘制到框架上,那是可行的。任何帮助,将不胜感激。

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)
关注者
0
被浏览
55
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    尝试将事件绑定到面板,而不是整个框架:

    self.panel.Bind(wx.EVT_PAINT, self.onPaint)
    

    您的版本对我来说很有效(Windows),但它会不断重新绘制面板,以致使整个处理器吃光了。

    来自文档: 请注意,在绘画事件处理程序中,即使不使用它,应用程序也必须始终创建wxPaintDC对象。 否则,在MS
    Windows下,为此窗口和其他窗口刷新将出错。

    在这里,您收到了整个帧的绘画事件,但是将直流用于面板。

    编辑:这http://wiki.wxpython.org/self.Bind%20vs.%20self.button.Bind很好地解释了为什么这行不通:

    self.Bind(wx.EVT_PAINT, self.onPaint, self.panel)
    

    在这种情况下,永远不会调用onPaint处理程序。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看