关于python:我不知道如何使用wxpython在面板中设置面板网格

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


我编辑了您的代码以使其正常工作,这是输出和代码:

enter

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)您有很多相互矛盾的展示位置和父母。例如,将面板p放在框架中(即p = wx.Panel(self...),然后再放置另一个(即p1 = wx.Panel(self,...),但是您没有说如何将它们添加到sizer中。首先,并非所有事物都需要拥有自己的面板,因此我直接添加了按钮。更重要的是,您需要将所有内容添加到sizer中,并与设置正确的父级保持一致。

例如,如果您希望按钮和静态文本位于其自己的面板中(例如,p5,以p为父元素),则可以通过以下方式实现:制作面板,添加按钮和静态文本,然后将面板p5添加到sizer中。