Панели WxWidgets в sizer, похоже, не работают - PullRequest
0 голосов
/ 13 января 2020

У меня есть проект WxWidgets, который настроен следующим образом:

Main Frame->Main Panel->Vertical Sizer
  ->Horizontal Sizer for a few buttons etc
  ->Horizontal Sizer that shows all the main info.
      ->In that main sizer, I have a SimpleBook
           ->The Simple book has 3 panels in it.

Независимо от того, что видимая страница SimpleBook находится под верхним сайзером "несколько кнопок".

При наличии Панель в sizer, соответствует ли панель расположению sizer в окне?

Это выглядело "идеально", когда SimpleBook был Sizer. Но я пытаюсь исправить ошибки в этом вопросе о стековом потоке.

РЕДАКТИРОВАТЬ: Добавление простого кода. Любые ошибки и т. Д. c здесь просто ошибка копирования / вставки. Код компилируется отлично. Трудно было найти все соответствующие фрагменты для копирования здесь.

type ControlWindow struct {
    wx.Frame
    panel                wx.Panel
    gamePanel            wx.Panel
    editProfilePanel     wx.Panel
    newProfilePanel      wx.Panel
    mainBook             wx.Simplebook
    profileChoice        ControlChoice
    platformChoice       ControlChoice
    vSizerEditProfile    wx.BoxSizer
    vSizerNewProfile     wx.BoxSizer
    gridSizerEditProfile wx.FlexGridSizer
    vSizerMainArea       wx.BoxSizer
    vSizerGameGrid       wx.BoxSizer
    statusbar            wx.StatusBar
    toolbar              wx.ToolBar
    menubar              wx.MenuBar
    hSizerSearch         wx.BoxSizer
    nextResults          wx.Button
    prevResults          wx.Button
    auiManager           wx.AuiManager
}
func MainWindow() ControlWindow {

    getPlatforms()
    w := ControlWindow{}
    w.Frame = wx.NewFrame(wx.NullWindow, -1, title", wx.DefaultPosition, wx.NewSizeT(800, 600))

    mainSizer := wx.NewBoxSizer(wx.VERTICAL)
    w.panel = wx.NewPanel(w, wx.ID_ANY)
    w.mainBook = wx.NewSimplebook(w.panel, wx.ID_ANY)

    blankPanel := wx.NewPanel(w, wx.ID_ANY)

    w.gamePanel = wx.NewPanel(w.panel, wx.ID_ANY)
    w.GameGrid = wx.NewGrid(w.gamePanel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.EXPAND|wx.ALL)
    w.vSizerGameGrid = wx.NewBoxSizer(wx.VERTICAL)
    w.vSizerGameGrid.Add(w.GameGrid)

    w.editProfilePanel = wx.NewPanel(w.panel, wx.ID_ANY)
    w.newProfilePanel = wx.NewPanel(w.panel, wx.ID_ANY)
    w.vSizerNewProfile = wx.NewBoxSizer(wx.VERTICAL)

    vSizer := wx.NewBoxSizer(wx.VERTICAL)
    hSizerLoad := wx.NewBoxSizer(wx.HORIZONTAL)
    w.hSizerSearch = wx.NewBoxSizer(wx.HORIZONTAL)
    w.vSizerMainArea = wx.NewBoxSizer(wx.HORIZONTAL)
    w.vSizerEditProfile = wx.NewBoxSizer(wx.VERTICAL)
    w.gridSizerEditProfile = wx.NewFlexGridSizer(3, 3, 7)

    hSizerLoad.Add(w.platformChoice.Choice)
    hSizerLoad.Add(w.profileChoice.Choice)
    hSizerLoad.Add(profileEditButton)
    hSizerLoad.Add(newProfileButton)

    w.hSizerSearch.Add(searchInput)
    w.hSizerSearch.Add(searchBy)
    w.hSizerSearch.Add(searchButton)
    w.hSizerSearch.Add(resetSearch)
    w.hSizerSearch.Add(perPage)
    w.hSizerSearch.Add(w.prevResults, 0, wx.ALIGN_BOTTOM)
    w.hSizerSearch.Add(w.totalGamesLabel, 0, wx.ALIGN_BOTTOM)
    w.hSizerSearch.Add(w.nextResults, 0, wx.ALIGN_BOTTOM)

    //Just so I can see where the panel actually is.
    blankPanel.SetBackgroundColour(wx.GetBLUE())
    w.mainBook.AddPage(blankPanel, "Blank Panel", true)
    w.mainBook.AddPage(w.gamePanel, "Game Panel Text", false)
    w.mainBook.AddPage(w.editProfilePanel, "Edit Profile Panel Text", false)
    w.mainBook.AddPage(w.newProfilePanel, "New Profile Panel Text", false)
    w.vSizerMainArea.Add(w.mainBook, 1, wx.EXPAND|wx.ALL)
    w.vSizerMainArea.Layout()

    /*This is what I had before but it left artifacts when hiding and showing sizers.
    **So that's why I'm trying to use simplebook...
    *   w.vSizerMainArea.Add(w.vSizerGameGrid, 1, wx.EXPAND|wx.ALL, 5)
    *   w.vSizerMainArea.Add(w.vSizerNewProfile, 1, wx.EXPAND|wx.ALL, 5)
    *   w.vSizerMainArea.Add(w.vSizerEditProfile, 1, wx.EXPAND|wx.ALL, 5)
    *   w.vSizerMainArea.Hide(w.vSizerGameGrid, false)
    *   w.vSizerMainArea.Hide(w.vSizerNewProfile, false)
    *   w.vSizerMainArea.Hide(w.vSizerEditProfile, false)
    */

    hSizerRunButtons.Add(SaveProfileGameChanges, 0, wx.ALIGN_BOTTOM)
    hSizerRunButtons.Add(RunButton, 0, wx.ALIGN_BOTTOM)
    vSizer.Add(hSizerLoad, 0, wx.EXPAND|wx.ALL, 5)
    vSizer.Add(w.hSizerSearch, 0, wx.EXPAND|wx.ALL, 5)
    vSizer.Add(w.vSizerMainArea, 3, wx.EXPAND|wx.ALL, 5)
    vSizer.Add(hSizerRunButtons, 0, wx.EXPAND|wx.ALL, 5)
    w.panel.SetSizer(vSizer)
    mainSizer.Add(w.panel, 1, wx.ALL|wx.EXPAND, 5)
    w.SetSizer(mainSizer)
    return w
}

1 Ответ

1 голос
/ 15 января 2020

Вы должны создать wxSimplebook страниц с самим элементом управления книгой в качестве родительского, а не с каким-то совершенно другим окном.

...