Пользовательский элемент управления wxPython в блокноте отображается над вкладками блокнота - PullRequest
0 голосов
/ 24 апреля 2019

Я использую пользовательский элемент управления в wxNotebook. Когда я обрабатываю событие рисования, оно рисуется поверх вкладок ноутбука, а не помещается в область вкладок. Как это исправить, чтобы контрольная краска находилась в нужной области?

Если элемент управления не находится на вкладке записной книжки, он отрисовывается правильно.

Вот изображение вопроса:

enter image description here

Вкладки записной книжки перезаписываются событием рисования элемента управления. Вот как выглядит форма в wxFormBuilder:

enter image description here

Вот код моего пользовательского элемента управления:

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

1 Ответ

0 голосов
/ 24 апреля 2019

Вам нужно только сделать объект ScopePanel2 дочерним для self.m_panel1 вместо MyFrame, изменив следующую строку:

self.scope_panel = ScopePanel2(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)

в class MyFrame на

self.scope_panel = ScopePanel2(self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...