0

我正在创建一个 Tabpanel1,Tabpanel2,它将成为 Notebook 的一部分。在该 TabPanel1 中,还有 3 个面板。panel1a,panel1b,panel1c

panel1a 的父 id 参数应该是什么。它应该是 TabPanel1 吗?

代码.py

import random
import wx


########################################################################

class TabPanel1(wx.Panel):
    #----------------------------------------------------------------------
    def __init__(self, parent):
        """"""
        wx.Panel.__init__(self, parent=parent)

        colors = ["red", "blue", "gray", "yellow", "green"]
        self.SetBackgroundColour(random.choice(colors))

    panel1 = wx.Panel(self,size=(400,100))
    panel1.SetBackgroundColour('brown')

    panel1gs = wx.GridSizer(2,2,1,2)

    panel1gs.AddMany( [ (wx.StaticText(panel1,label='FirstLabel'),0,wx.EXPAND),
            (wx.StaticText(panel1,label='SecondLabel'),0,wx.EXPAND),
            (wx.StaticText(panel1,label='ThirdLabel'),0,wx.EXPAND),
            (wx.StaticText(panel1,label='FourthLabel'),0,wx.EXPAND)
            ] )



    panel1.SetSizer(panel1gs)

    panel2 = wx.Panel(self,size=(400,100))
    panel2.SetBackgroundColour('#4f5042')

    panel3 = wx.Panel(self,size=(400,100))
    panel3.SetBackgroundColour('#4f5042')

        btn = wx.Button(self, label="Press Me")
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(btn, 0, wx.ALL, 5)
    sizer.Add(panel1, 0, wx.ALL, 5)
    sizer.Add(panel2, 0, wx.ALL, 5)
    sizer.Add(panel3, 0, wx.ALL, 5)


        self.SetSizer(sizer)

class TabPanel2(wx.Panel):
    #----------------------------------------------------------------------
    def __init__(self, parent):
        """"""
        wx.Panel.__init__(self, parent=parent)

        colors = ["red", "blue", "gray", "yellow", "green"]
        self.SetBackgroundColour(random.choice(colors))

        btn = wx.Button(self, label="Press Me")
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(btn, 0, wx.ALL, 10)

        self.SetSizer(sizer)

########################################################################
class DemoFrame(wx.Frame):
    """
    Frame that holds all other widgets
    """

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""        
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                          "Notebook Tutorial",
                          size=(800,600)
                          )
        panel = wx.Panel(self)

        notebook = wx.Notebook(panel)
        tabOne = TabPanel1(notebook)
        notebook.AddPage(tabOne, "Tab 1")

        tabTwo = TabPanel2(notebook)
        notebook.AddPage(tabTwo, "Tab 2")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
        panel.SetSizer(sizer)
        self.Layout()

        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = DemoFrame()
    app.MainLoop()
4

1 回答 1

0

简单地说,parent对象的 是它将出现在里面的对象。此外,当父级被销毁时,子级将被销毁,在隐藏时隐藏,等等。

因此,如果panel1apanel1bpanel1c都出现在 内部 panel1,那么panel1对于父母来说是最好的选择,因为它最接近那些孩子。panel1,反过来,在里面TabPanel1,所以它的父母是TabPanel1。理解?

TabPanel1.__init__()顺便说一句,您的方法中似乎存在一些缩进错误。希望这只是剪切和粘贴到 SO 中的错误。

于 2012-09-23T02:50:32.203 回答