wxPython - 帧会瞬间出现并消失

时间:2014-06-11 23:05:02

标签: python wxpython

我编写了一个简单的代码来显示按钮网格。但不知何故,在执行时,框架出现并在闪光灯中消失,留下一个错误,表示:

wx._core.PyAssertionError:C ++断言“m_hDWP”在wxWindow :: EndRepositioningChildren()中的.... \ src \ msw \ window.cpp(5168)失败:不应该被调用

有一个菜单栏和一个按钮网格。使用boxsizer将菜单栏和按钮网格放在框架中。

我无法弄清楚如何让它发挥作用。任何帮助将不胜感激。

[编辑]:删除行 self.SetMenubar(菜单栏)使其在没有菜单栏的情况下工作

这是我的代码:

import wxversion
wxversion.select("3.0")

import wx

class Main(wx.Frame):
    def __init__(self,parent,id,title):    
        wx.Frame.__init__(self,parent,id,title)
        self.SetBackgroundColour(wx.BLUE)

        menubar = wx.MenuBar()

        menu_1 = wx.Menu()
        menu_1.Append(-1,'Open','&Open')
        menu_1.Append(-1,'Save','&Save')

        menu_2 = wx.Menu()
        menu_2.AppendCheckItem(-1,'Sound On','&Sound On')

        menu_3 = wx.Menu()
        menu_3.Append(-1,'Help','&Help')
        menu_3.Append(-1,'About','&About')

        menubar.Append(menu_1,'File')
        menubar.Append(menu_2,'Settings')
        menubar.Append(menu_3,'Help')
        self.SetMenuBar(menubar) ## REMOVING THIS MAKES IT WORK, BUT WITHOUT THE MENU BAR ##


        vsizer = wx.BoxSizer(wx.VERTICAL)
        gsizer = wx.GridSizer(6,6,2,2)
        self.btn = range(36)

        for ix in range(0,36):
            self.btn[ix] = wx.Button(self,ix+1000,'Title',(10,10))
            gsizer.Add(self.btn[ix], 0, wx.ALL|wx.EXPAND, border=2)

        vsizer.Add(menubar,-1,wx.EXPAND|wx.ALL)
        vsizer.Add(gsizer, 0, wx.EXPAND|wx.ALL, border=2)

        self.SetSizer(vsizer)
        self.Center()
        self.Show(True)


a = wx.App()
h = Main(None,-1,'App')
h.Show(True)
a.MainLoop()

2 个答案:

答案 0 :(得分:0)

我认为问题出在你的缩进上。您需要在类的主体之外构建应用程序。在上面的示例中,您已将其设置为类实例。只是“dedent”,错误的缩进,这些线条应该有效。

a = wx.App()
h = Main(None,-1,'App')
h.Show(True)
a.MainLoop()

答案 1 :(得分:0)

实际上Joran Beasley是对的:你不应该向sizer添加菜单栏(那应该做什么?),而不是wx.ToolBar

只需注释

    # vsizer.Add(menubar,-1,wx.EXPAND|wx.ALL)

它将适用于2.9.5和3.0.1b(以及3.0,我也认为)。