WxPython中的Box Sizer问题

时间:2013-12-03 07:52:23

标签: python-2.7 wxpython

我一直在尝试制作一些允许我在一行中有多个句子的东西。 代码是:

import wx
app = wx.PySimpleApp()


class MyDialog(wx.Frame):
"""
This is my dialog in which I have my interface.
"""
def __init__(self):
    """
    This stores all my variables.
    """
    wx.Frame.__init__(self, None, -1, "Edit Action", size=(400, 300))
    self.my_mini_panels = []
    self.my_mini_hboxes = []
    self.my_mini_vboxes = []
    self.main_vbox = wx.BoxSizer(wx.VERTICAL)
    self.main_hbox = wx.BoxSizer(wx.HORIZONTAL)
    self.my_mini_panels.append(wx.Panel(self, -1, style=wx.SIMPLE_BORDER,
                                        size=(400, 20)))
    self.my_mini_hboxes.append(wx.BoxSizer(wx.HORIZONTAL))
    self.my_mini_vboxes.append(wx.BoxSizer(wx.VERTICAL))
    self.my_mini_hboxes[0].AddMany((wx.StaticText(self.my_mini_panels[0],
                                                  -1, 'Here it is... '),
                                    wx.StaticText(self.my_mini_panels[0],
                                                  -1, 'There it was.')))
    self.my_mini_panels.append(wx.Panel(self, -1, style=wx.SIMPLE_BORDER,
                                        size=(400, 20)))
    self.my_mini_hboxes.append(wx.BoxSizer(wx.HORIZONTAL))
    self.my_mini_vboxes.append(wx.BoxSizer(wx.VERTICAL))
    self.my_mini_hboxes[1].AddMany((wx.StaticText(self.my_mini_panels[1],
                                                  -1, 'Hello, '),
                                    wx.StaticText(self.my_mini_panels[1],
                                                  -1, 'Goodbye!')))
    for i, hbox in enumerate(self.my_mini_hboxes):
        hbox.Add(self.my_mini_vboxes[i])
    self.main_vbox.AddMany(tuple(self.my_mini_hboxes))
    self.main_hbox.Add(self.main_vbox)
    self.SetSizer(self.main_hbox)

if __name__ == '__main__':
dialog = MyDialog()
dialog.Show(True)
app.MainLoop()

它似乎不起作用。我希望它看起来像这样:enter image description here

我做错了什么?

修改

也许我应该说明静态文本对象必须是分开的。我不能只用一个更大的段替换一行上的两段文本。

1 个答案:

答案 0 :(得分:1)

您不需要大量的大小调整器和面板。您可以使用一个面板+一个sizer +两个静态文本小部件。这是代码:

import wx

class MyDialog(wx.Frame):
    """
    This is my dialog in which I have my interface.
    """
    def __init__(self):
        """
        This stores all my variables.
        """
        wx.Frame.__init__(self, None, -1, "Edit Action", size=(400, 300))
        panel = wx.Panel(self)

        main_vbox = wx.BoxSizer(wx.VERTICAL)

        label_one = wx.StaticText(panel, label="Here it is... There it was.")
        label_two = wx.StaticText(panel, label="Hello, Goodbye!")

        main_vbox.Add(label_one, 0, wx.ALL, 5)
        main_vbox.Add(label_two, 0, wx.ALL, 5)

        panel.SetSizer(main_vbox)

if __name__ == '__main__':
    app = wx.App(False)
    dialog = MyDialog()
    dialog.Show(True)
    app.MainLoop()

另请注意,我将您的app对象从wx.PySimpleApp更改为wx.App。 wx.PySimpleApp已被弃用,建议从现在开始使用wx.App。

你可能会考虑从wx.Dialog而不是wx.Frame进行子类化,因为如果这真的应该是一个对话框会更有意义。