Я использую пользовательский элемент управления в 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