wxpython - sizer 中的 WxWidgets 面板似乎无法正常工作
问题描述
我有一个 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 时,这看起来很“完美”。但我正在尝试修复这个 stackoverflow 问题中的错误。
编辑:添加简单的代码。这里的任何错误等都只是复制/粘贴错误。代码编译得很好。在这里很难找到所有相关的作品来复制。
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
}
解决方案
您必须wxSimplebook
以书籍控件本身作为父级而不是完全不同的窗口来创建页面。
推荐阅读
- javascript - Pipedrive 网络表单未在反应引导模式中加载
- python - 如何通过 SAML ADFS 向 AWS 进行身份验证?
- hadoop - Apache Knox Ldap 集成失败
- python - Kivy 将视频合并到导航抽屉
- flutter - 每两个项目的混合布局中的颤振列表项目
- python-3.x - 如何从视频文件中提取清晰的帧?
- webpack - 对供应商块进行摇树是否有害?
- python - NGROK 返回错误 401 以松弛发出 POST 请求
- c# - Insert Into 语句中的语法错误,将数据插入特定列
- pandas - 通过循环遍历数据框来堆叠 Seaborn Catplot