0

我有这个 python 代码我的 wxpython 问题 我在 Python 2.7 中使用了最后一个 wxpython。

如果我想使用注释代码并使用更多面板,网格可见,我该怎么办?

我尝试了很多方法,但我完全无能为力。问题是应用程序崩溃,或者它没有正确显示。

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

1 回答 1

1

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

在此处输入图像描述

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)不建议将绝对位置和大小与sizer结合起来。只要坚持一个或另一个(最好是sizer)。

2)你有一堆相互冲突的安置和父母。例如,面板p被放入框架中(即 p = wx.Panel(self...),然后是另一个(即p1 = wx.Panel(self,...),但是您没有说明如何将这些添加到尺寸器中。首先,不是所有东西都需要有自己的面板,所以我直接添加了按钮。更重要的是,你需要将所有东西都添加到sizer中,并且要与设置正确的父对象保持一致。

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

于 2013-08-25T04:29:43.813 回答