在wxpython中向StaticBox添加元素

时间:2015-11-10 13:32:50

标签: python wxpython

我正在尝试学习wxpython来在python中进行图形界面。 我想要的界面应该有2个静态框和一个按钮,它应该在第一个静态框中。我想要这样的东西:

|----------------------------------------------|
|                                              |
|  #####                                       |
|                                              |
|                                              |
|----------------------------------------------|
|                                              |
|                                              |
|                                              |
|----------------------------------------------|

我不知道为什么我会在左上角找到按钮,我怀疑我将其配置错误,这就是为什么它不在静态框中。我得到这样的东西:

######-----------------------------------------|
|                                              |
|                                              |
|                                              |
|                                              |
|----------------------------------------------|
|                                              |
|                                              |
|                                              |
|----------------------------------------------|

我的代码是:

class Frame(wx.Frame):
def __init__(self, title):
    wx.Frame.__init__(self, None, title=title, pos=(150,150), size=(600,600))

    # Defining panel
    panel = wx.Panel(self,-1)

    # Elements of the frame
    staticBoxUno = wx.StaticBox(panel, -1, 'Uno:', pos=wx.Point(-1, -1), size=wx.Size(600, 150), style=0)
    staticBoxUno.SetOwnFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False, 'MS Shell Dlg'))

    staticBoxDos = wx.StaticBox(panel, -1, 'Dos:', pos=wx.Point(-1, -1), size=wx.Size(600, -1), style=0)
    staticBoxDos.SetOwnFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False, 'MS Shell Dlg'))

    buttonUno = wx.Button(panel, -1, "OK")

    #Initialization Sizers
    boxMadre = wx.BoxSizer(wx.VERTICAL)
    boxMadre.AddSpacer(5)
    boxMadre.Add(staticBoxUno, 0, wx.EXPAND|wx.ALL, 0)
    boxMadre.AddSpacer(5)
    boxMadre.Add(staticBoxDos, 1, wx.EXPAND|wx.ALL, 0)

    staticBoxUnoSizer = wx.StaticBoxSizer(staticBoxUno, wx.VERTICAL)
    staticBoxUnoSizer.Add(buttonUno, -1, wx.EXPAND | wx.ALL, 5)

    panel.SetSizer(boxMadre)
    panel.Layout()

app = wx.App(redirect=True)   # Error messages go to popup window
top = Frame("<<project>>")
top.Show()
app.MainLoop()

我想问题是当我尝试将按钮添加到StaticBoxUno但我不确切知道什么是失败时

非常感谢! 巴勃罗

1 个答案:

答案 0 :(得分:0)

按如下方式更改代码:

    # …
    buttonUno = wx.Button(panel, -1, "OK")

    staticBoxUnoSizer = wx.StaticBoxSizer(staticBoxUno, wx.VERTICAL)
    # use 0 instead of -1 as proportion in sizer
    staticBoxUnoSizer.Add(buttonUno, 0, wx.EXPAND|wx.ALL, 5)

    # …
    # add sizer instead of StaticBox!
    boxMadre.Add(staticBoxUnoSizer, 0, wx.EXPAND|wx.ALL, 0)