此处的逻辑是创建一个Panel,在其中添加控件,然后创建一个BoxSizer,在其中声明您在Panel中添加的每个控件在调整大小时的行为,并最终在Panel上设置应用BoxSizer的对象.
您有2期.
>首先,您缺少posPnlobject的上述语句的最后一部分.添加:
posPnl.SetSizer(posPnlSzr)
将控件添加到posPnlSzr之后
>第二个问题是您要在mainSzr中添加posSnlSzr.这样做是错误的.同样,逻辑是将控件添加到大小调整器,您可以将Panel视为复合控件.因此,正确的代码是将posPnl添加到mainSzr中:
mainSzr.Add(posPnl)
据我所知,您正在尝试使posPnl在主窗口中自动调整大小.如果添加面板以使mainSzr实际调整其大小:
mainSzr.Add(posPnl, 1, wx.GROW)
这给出了最终的源代码:
#!/usr/bin/env python
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent)
#add position panel
posPnl = wx.Panel(self)
lbl1 = wx.StaticText(posPnl, label="Position")
lbl2 = wx.StaticText(posPnl, label="Size")
sizeCtrl = wx.TextCtrl(posPnl)
posPnlSzr = wx.BoxSizer(wx.HORIZONTAL)
posPnlSzr.Add(lbl1, 1, wx.GROW)
posPnlSzr.Add(sizeCtrl, 1, wx.GROW)
posPnlSzr.Add(lbl2, 1, wx.GROW)
posPnl.SetSizer(posPnlSzr)
#create a top leverl sizer to add to the frame itself
mainSzr = wx.BoxSizer(wx.VERTICAL)
mainSzr.Add(posPnl, 1, wx.GROW)
self.SetSizerAndFit(mainSzr)
self.Show()
app = wx.App(False)
frame = MainWindow(None, "Trading Client")
app.MainLoop()