wxPython MenuBar会导致奇怪的初始布局

时间:2014-03-08 03:44:19

标签: wxpython

我在Python 3上使用wxPython(Phoenix)。我当前的代码:

import wx

class GUI(wx.Frame):
def __init__(self, parent, title):
    super(GUI, self).__init__(parent, title=title, size=(-1, -1))
    self.ini_gui()
    self.Show()

def ini_gui(self):
    self.status_bar = self.CreateStatusBar() 
    main_panel = wx.Panel(self)
    filemenu = wx.Menu() 
    menu_open = filemenu.Append(wx.ID_OPEN, 'Open', 'Open a file')
    menu_about = filemenu.Append(wx.ID_ABOUT, 'About', 'About...')

    menubar = wx.MenuBar()
    menubar.Append(filemenu, "File")
    # self.SetMenuBar(menubar) # !!!CAUSE WEIRD LAYOUT!!!

    vbox = wx.BoxSizer(wx.VERTICAL)
    selection_area = wx.BoxSizer(wx.HORIZONTAL)
    game_label = wx.StaticText(main_panel, label='Select a game')
    selection_area.Add(game_label, flag=wx.RIGHT, border=8)
    gamelist = ['A', 'B']
    self.game_combobox = wx.ComboBox(main_panel,
                                size=wx.DefaultSize, choices=gamelist)
    selection_area.Add(self.game_combobox)
    vbox.Add(selection_area, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10)
    main_panel.SetSizer(vbox)

if __name__ == '__main__':
    app = wx.App()
    GUI(None, title='Demo')
    app.MainLoop()

窗口如下所示:

Expected layout

但是当我添加一个MenuBar(取消注释第18行self.SetMenuBar(menubar))时,最初窗口将如下所示:

enter image description here

如果我调整窗口大小或最大化它,它们的布局只会恢复正常。

我的代码有什么问题? 第一次如何使MenuBar窗口正确显示?如下:

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:1)

移动线

self.SetMenuBar(menubar)

到ini_gui的末尾为我修复了它。

答案 1 :(得分:0)

您可以在代码中使窗口的size更大:

super(GUI, self).__init__(parent, title=title, size=(-1, -1))

到:

super(GUI, self).__init__(parent, title=title, size=(400,200))

这将消除每次程序运行时调整大小的问题。