我编写了一个简单的代码来显示按钮网格。但不知何故,在执行时,框架出现并在闪光灯中消失,留下一个错误,表示:
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()
答案 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,我也认为)。