Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxPython-帧在一瞬间出现并消失_Python_Wxpython - Fatal编程技术网

wxPython-帧在一瞬间出现并消失

wxPython-帧在一瞬间出现并消失,python,wxpython,Python,Wxpython,我已经编写了一个简单的代码来显示按钮网格。但不知何故,在执行时,帧在一瞬间出现并消失,留下一个错误,上面写着: Wx.yCy.PyAsRealError:C++断言MyHDWP在.\SRC\MSW\WOWDO.CPP5168中失败,在WxWelwindows中::EndoRealPosidStIs:不应该被称为 有一个菜单栏和按钮网格。菜单栏和按钮网格都使用boxsizer放置在框架中 我不知道如何使它工作。任何帮助都将不胜感激 [编辑]:删除self.setMenuBarManubar行使其

我已经编写了一个简单的代码来显示按钮网格。但不知何故,在执行时,帧在一瞬间出现并消失,留下一个错误,上面写着:

Wx.yCy.PyAsRealError:C++断言MyHDWP在.\SRC\MSW\WOWDO.CPP5168中失败,在WxWelwindows中::EndoRealPosidStIs:不应该被称为

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

我不知道如何使它工作。任何帮助都将不胜感激

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

这是我的密码:

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()

我认为问题在于你的压痕。您需要在类主体之外构造应用程序。在上面的示例中,您已经将其设置为类实例。只要删除这些行,呃,取消缩进,就行了

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

实际上,Joran Beasley是对的:你不应该在一个sizer上添加一个菜单栏,与wx.ToolBar相比,它应该做什么呢

就说吧

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

我想它在2.9.5和3.0.1b以及3.0上也能工作。

我刚刚修复了压痕。谢谢你指出@jaimie,但是我的代码在IDE中有正确的缩进。遗憾的是,这并不是这个错误的根源。对不起,我只有wx 2.8本地版本,而且它在那里工作。是的,刚刚发现。感谢@jaimeworks在wx 2.8.0中为我做的一切,我不得不对wx版本的东西进行注释。。。另外,您可能希望尝试a=wx.Appredirect=False,这样您就可以在您的consoleThanks@JoranBeasley中看到任何回溯消息。好的,我删除了导入wxversion,它已成功编译,但菜单栏不可见。有线索吗?没有像Jaime我只有2.8。。。你可以试试2.8。。。也许是3.0版中出现了一些问题,或者是其他什么问题。你是说这两行代码都没有注释吗?self.SetMenuBarmenubar vsizer.Addmenubar,-1,wx.EXPAND | wx。ALL@JoranBeasley事实上,它在2.8中是这样的,谢谢!