Я очень плохо знаком с wxpython.
Моя цель - создать пользовательский интерфейс, состоящий из двух горизонтальных панелей с определенными элементами управления.Я получил ControlPanel из wx.Panel, который я хочу интегрировать в мейнфрейм.controlPanel состоит из wx.staticBox и двух «sub» wx.StaticBox, куда добавляются некоторые элементы управления.Каким-то образом, когда окно открывается, элементы управления отображаются в верхнем левом углу staticBox, как показано на этом изображении
Вы можете объяснить, почему элементы управления не распространяются в staticBoxes изэтот набор кода:
import wx
from wx._core import ID_ANY
from collections import namedtuple
class mvtControlPanelUI(wx.Panel):
m_mainCtrBoxSizer = []
m_mainCtrStaticBox = []
m_commonControlsBox = []
m_customControlsBox = []
m_inputDataPathStruct = []
m_outputDataPathStruct = []
m_commonCtrlSizer = []
m_inputDataCtrlSizer = []
m_outputDataCtrlSizer = []
def __init__(self, parent):
wx.Panel.__init__(self, parent, name="controlPanel")
self.SetBackgroundColour('white')
self.m_mainCtrStaticBox = wx.StaticBox(self, label = "Controls")
self.m_mainCtrBoxSizer = wx.StaticBoxSizer(self.m_mainCtrStaticBox,
wx.VERTICAL)
# common controls
self.initCustomControls()
self.initCommonControls()
self.SetSizer(self.m_mainCtrBoxSizer)
self.Layout()
# common control initialization
def initCommonControls(self):
#input data controls
self.m_commonControlsBox = wx.StaticBox(self.m_mainCtrStaticBox, -1, "Common controls");
#common control sizer
self.m_commonCtrlSizer = wx.StaticBoxSizer(self.m_commonControlsBox, wx.VERTICAL)
#input data controls sizer
self.m_inputDataCtrlSizer = wx.BoxSizer(wx.HORIZONTAL)
# Create the struct
self.m_inputDataPathStruct = namedtuple("staticText", "editBox", "browseBn")
# static text
self.m_inputDataPathStruct.staticText = wx.StaticText(self.m_commonControlsBox, -1, "Input data path:", style = wx.ALIGN_LEFT)
self.m_inputDataCtrlSizer.Add(self.m_inputDataPathStruct.staticText, 0, wx.ALL|wx.CENTER, 5)
# text box
self.m_inputDataPathStruct.editBox = wx.TextCtrl(self.m_commonControlsBox, -1, "/path/to/data/folder", style = wx.ALIGN_LEFT)
self.m_inputDataCtrlSizer.Add(self.m_inputDataPathStruct.editBox, 0, wx.ALL|wx.CENTER, 5)
# browse button
self.m_inputDataPathStruct.browseBn = wx.Button(self.m_commonControlsBox, -1, "...", style = wx.ALIGN_LEFT)
self.m_inputDataCtrlSizer.Add(self.m_inputDataPathStruct.browseBn, 0, wx.ALL|wx.CENTER, 5)
# insert input controls sizer in common control sizer
self.m_commonCtrlSizer.Add(self.m_inputDataCtrlSizer, 1, wx.ALL|wx.CENTER, 10)
#add common control box to the mainControl box sizer
self.m_mainCtrBoxSizer.Add(self.m_commonControlsBox, 1, wx.ALL|wx.EXPAND, 10)
#
def initCustomControls(self):
self.m_customControlsBox = wx.StaticBox(self.m_mainCtrStaticBox, -1, "custom controls");
#custom control sizer
self.m_customCtrlSizer = wx.StaticBoxSizer(self.m_customControlsBox, wx.VERTICAL)
#static text
staticText = wx.StaticText(self.m_customControlsBox, -1, "custom Controls go Here", style = wx.ALIGN_LEFT)
self.m_customCtrlSizer.Add(staticText, 1, wx.ALL|wx.CENTER, 10)
self.m_mainCtrBoxSizer.Add(self.m_customControlsBox, 4, wx.ALL|wx.EXPAND, 10)
MainFrame:
import wx
import baseUI.mvtControlPanelUI as cPnl
import baseUI.mvtResultsPanelUI as rPnl
TBFLAGS = ( wx.TB_HORIZONTAL
| wx.NO_BORDER
| wx.TB_FLAT
#| wx.TB_TEXT
#| wx.TB_HORZ_LAYOUT
)
class mvtMainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, wx.ID_ANY, 'myAwesomeFrame', size=(600, 400))
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
# panels
mainPanel = wx.Panel(self)
controlPnl = cPnl.mvtControlPanelUI(mainPanel)
resultsPnl = rPnl.mvtResultsPanelUI(mainPanel)
# Main Panel sizer wraps control and results panels
mainFrameSizer = wx.BoxSizer(wx.VERTICAL)
mainPnlSizer = wx.BoxSizer(wx.HORIZONTAL)
mainPnlSizer.Add(controlPnl, proportion = 1, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP)
mainPnlSizer.Add(resultsPnl, proportion = 3, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP)
mainPanel.SetSizer(mainFrameSizer)
# mainFrameSizer.Add(self._ribbon, 0, wx.EXPAND)
mainFrameSizer.Add(mainPnlSizer, 1, wx.EXPAND)
self.CreateStatusBar()
self.Layout()
def OnCloseWindow(self, event):
self.Destroy()
def OnFullScreen(self, event):
self.ShowFullScreen(not self.IsFullScreen(), 0)