【问题标题】:Why is wxPython OnPaint method not triggering for wx.lib.scrolledpanel.ScrolledPanel?为什么 wxPython OnPaint 方法不会为 wx.lib.scrolledpanel.ScrolledPanel 触发?
【发布时间】:2013-06-20 08:07:48
【问题描述】:

首先,调试器不会触及我的断点。 它是在我的自定义类的 OnPaint 方法的第一条指令中设置的。

import wx.aui, wx.lib.agw.aui
from wx.lib import platebtn
import wx.lib.scrolledpanel as spanel
class GuiScrolledPanel(spanel.ScrolledPanel):
    def __init__(self, *args, **kwargs):
        spanel.ScrolledPanel.__init__(self, *args, **kwargs)
        self.SetSizer(GuiSchemaSizer())   
        self.SetupScrolling()         
        self.caption = "No active schema - Create a new schema or load one "

    def OnChildFocus(self, *args, **kwargs):
        self.Layout()
        self.AdjustScrollbars()
        return spanel.ScrolledPanel.OnChildFocus(self, *args, **kwargs)

    def updateCaption(self, caption):
        self.caption = caption

    def OnPaint(self, *args, **kwargs):
        some_result = spanel.ScrolledPanel.OnPaint(self, *args, **kwargs)
        print  'OnPaint in MyDrawingArea'
        dc = wx.PaintDC(self)

        dc.BeginDrawing()
        if self.BufferBmp != None:
            print  '...drawing'
            dc.DrawBitmap(self.BufferBmp, 0, 0, True)
            #should draw smth here, but what's the point when the method isn't even called, heh?
        else:
            print  '...nothing to draw'
        dc.EndDrawing()
        return some_result 

非常感谢:)

【问题讨论】:

    标签: events wxpython panel lifecycle


    【解决方案1】:

    看来 OnPaint 方法必须注册到事件wx.EVT_BIND

        self.Bind(wx.EVT_PAINT, self.OnPaint)
    

    【讨论】:

      猜你喜欢
      • 2011-02-18
      • 2018-08-12
      • 2021-04-18
      • 2021-11-29
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多