I don't how know to set panels + grid in a frames with wxpython
我有这个python代码,我的wxpython问题
我在Python 2.7中使用了最后一个wxpython。
如果我想使用注释的代码并使用更多面板(网格),该怎么办
可见吗?
我尝试了很多方法,但我完全无能为力。
问题是该应用程序崩溃了,或者无法正确显示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import wx import wx.grid as gridlib class MyGrid(gridlib.Grid): """""" #---------------------------------------------------------------------- def __init__(self, parent): """Constructor""" gridlib.Grid.__init__(self, parent) self.CreateGrid(2, 3) # test all the events //Code for events ######################################################################## class MyForm(wx.Frame): """""" #---------------------------------------------------------------------- def __init__(self): """Constructor""" wx.Frame.__init__(self, parent=None, title="An Eventful Grid",size=(700,700)) p = wx.Panel(self) # IF I UNCOMMNT THIS ,IT DOESNT LOADS THE WINDOW OR GRID APPEARS CORRUPTED #self.panel = p1 = wx.Panel(self,pos=(0,200),size=(100,100)) #button2 = wx.Button(p1, -1, label="click me") #wx.StaticText(p, -1,"Right-click on the panel to show a popup menu",(100,100)) #self.panel = p2 = wx.Panel(self,pos=(200,200),size=(400,200)) myGrid = MyGrid(p) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(myGrid, 1, wx.EXPAND)#,pos=(200,200) #sizer.Add(p2, 2, wx.EXPAND) p.SetSizer(sizer) if __name__ =="__main__": app = wx.PySimpleApp() frame = MyForm().Show() app.MainLoop() |
我编辑了您的代码以使其正常工作,这是输出和代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import wx import wx.grid as gridlib class MyGrid(gridlib.Grid): def __init__(self, parent): """Constructor""" gridlib.Grid.__init__(self, parent) self.CreateGrid(2, 3) class MyForm(wx.Frame): def __init__(self): """Constructor""" wx.Frame.__init__(self, parent=None, title="An Eventful Grid",size=(700,700)) p = wx.Panel(self) button2 = wx.Button(p, -1, label="click me") st = wx.StaticText(p, -1,"Right-click on the panel to show a popup menu") p2 = wx.Panel(p, size=(400,200)) p2.SetBackgroundColour((100, 0, 0)) myGrid = MyGrid(p) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(button2) sizer.Add(st) sizer.Add(myGrid, 1, wx.EXPAND)#,pos=(200,200) sizer.Add(p2, 2, wx.EXPAND) p.SetSizer(sizer) if __name__ =="__main__": app = wx.PySimpleApp() frame = MyForm().Show() app.MainLoop() |
我希望这对您有用,因为我没有花时间去尝试确切地猜出您要干什么。
您的原件中有问题的几件事:
1)建议不要将绝对位置和尺寸与尺寸调整器结合使用。只需坚持其中一个(最好是上浆者)。
2)您有很多相互矛盾的展示位置和父母。例如,将面板
例如,如果您希望按钮和静态文本位于其自己的面板中(例如,p5,以p为父元素),则可以通过以下方式实现:制作面板,添加按钮和静态文本,然后将面板p5添加到sizer中。