我正在wxNotebook中使用自定义控件。当我处理绘画事件时,它绘制在笔记本选项卡的顶部,而不是放置在选项卡区域内。我该如何解决这个问题,以使控制涂料在适当的区域内?
如果该控件不在笔记本选项卡中,则它将正确绘制。
以下是该问题的图片:
笔记本的选项卡被控件的绘画事件覆盖。这就是wxFormBuilder中的表单:
这是我的自定义控件的代码:
class ScopePanel2(wx.Control):
"""A ScopePanel is a custom wxWidget to display oscilloscope-type data."""
def __init__(self, parent, id_, position, size, style):
# print("Initializing!")
super().__init__(parent, id_, position, size, style)
self.SetBackgroundStyle(wx.BG_STYLE_PAINT)
# bind events
self.Bind(wx.EVT_PAINT, self.event_on_paint)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.event_erase_background)
self.Bind(wx.EVT_SIZE, self.event_size)
self.Bind(wx.EVT_UPDATE_UI, self.event_update_ui)
self.Layout()
self.Fit()
def event_on_paint(self, event):
dc = wx.AutoBufferedPaintDC(self)
self.paint(dc)
event.Skip()
def event_erase_background(self, event):
event.Skip()
def event_size(self, event):
self.Refresh()
event.Skip()
def event_update_ui(self, event):
self.Refresh()
event.Skip()
def paint(self, dc):
dc.SetBackground(wx.Brush(wx.GREEN))
dc.Clear()
dc.DrawText("Hello!", 0, 0)
这是窗口初始化代码(由wxFormBuilder生成)
class MyFrame ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
self.SetForegroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) )
self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) )
bSizer41 = wx.BoxSizer( wx.VERTICAL )
self.m_notebook4 = wx.Notebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_panel1 = wx.Panel( self.m_notebook4, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
bSizer3 = wx.BoxSizer( wx.VERTICAL )
self.scope_panel = ScopePanel2(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
bSizer3.Add( self.scope_panel, 1, wx.ALL|wx.EXPAND, 5 )
self.m_panel1.SetSizer( bSizer3 )
self.m_panel1.Layout()
bSizer3.Fit( self.m_panel1 )
self.m_notebook4.AddPage( self.m_panel1, u"a page", False )
self.m_panel2 = wx.Panel( self.m_notebook4, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
bSizer2 = wx.BoxSizer( wx.VERTICAL )
self.m_staticText1 = wx.StaticText( self.m_panel2, wx.ID_ANY, u"MyLabel", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText1.Wrap( -1 )
bSizer2.Add( self.m_staticText1, 0, wx.ALL, 5 )
self.m_panel2.SetSizer( bSizer2 )
self.m_panel2.Layout()
bSizer2.Fit( self.m_panel2 )
self.m_notebook4.AddPage( self.m_panel2, u"a page", False )
bSizer41.Add( self.m_notebook4, 1, wx.EXPAND |wx.ALL, 5 )
self.SetSizer( bSizer41 )
self.Layout()
self.Centre( wx.BOTH )
def __del__( self ):
pass
答案 0 :(得分:0)
只需更改以下行,即可使 END {
if (d[1] != "") print d[1]
if (d[0] != "") print d[0]
}
对象成为ScopePanel2
的子对象,而不是self.m_panel1
:
MyFrame
在self.scope_panel = ScopePanel2(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
至
class MyFrame