【问题标题】:I don't how know to set panels + grid in a frames with wxpython我不知道如何使用 wxpython 在框架中设置面板 + 网格
【发布时间】:2013-08-27 19:22:01
【问题描述】:

我有这个python代码my problem with 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()

【问题讨论】:

  • 您能否更具体一些,并在您的问题中包含一个显示问题的最小示例?阅读有关标记以了解如何嵌入代码(橙色问号)。

标签: python grid wxpython panel


【解决方案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 结合使用。只需坚持一个或另一个(最好是 sizers)。

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

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

【讨论】:

  • 太棒了,我对这一切都很陌生,谢谢你的专业代码!
  • 乐于助人。如果您认为这完全回答了您的问题,您可能需要单击复选标记以接受它。这将节省其他人的时间,因此他们不会阅读您的问题和我的答案,看看它是否已被回答。
猜你喜欢
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2014-11-03
  • 1970-01-01
  • 2012-06-22
相关资源
最近更新 更多