繁体   English   中英

wxpython笔记本-创建新页面

[英]wxpython notebook - creating new pages

我是这里的新手,而且我是编码的新手(自今年4月以来),请保持温柔;-)

这是我的简化代码。 每次我通过单击“ ClickMe”按钮在笔记本中创建新页面时。 我的问题是: 是否有不使用if / elif语句的选项? 将有10页或更多页面,因此希望避免每次都键入类似的代码。 有什么方法可以使用动态创建变量(self.page ...)?

import wx

class PageOne(wx.Panel):

    def __init__(self, parent):

        wx.Panel.__init__(self, parent)
        wx.StaticText(self, -1, pos = (10,10), label = "Test")


class PageTwo(wx.Panel):

    def __init__(self, parent):

        wx.Panel.__init__(self, parent)
        wx.StaticText(self, -1, pos = (10,10), label = "Test 2")
        self.text = wx.TextCtrl(self,-1, pos = (100,10))

    def OnLoad(self, text):
        self.text.AppendText(str(text))

class MainFrame(wx.Frame):

    def __init__(self, parent, id, title, pos, size):

        wx.Frame.__init__(self, parent, id, title, pos, size)

        panel = wx.Panel(self)

        self.nb = wx.Notebook(panel)
        self.page1 = PageOne(self.nb)
        self.nb.AddPage(self.page1, "PAGE 1")

        self.button = wx.Button(self.page1, -1, pos = (100,10), label = "ClickMe")

        self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)

        sizer = wx.BoxSizer()
        sizer.Add(self.nb, 1, wx.EXPAND)
        panel.SetSizer(sizer)


    def OnClick(self, event):

        page_number = self.nb.GetPageCount()

        if page_number == 1: 
            self.page2 = PageTwo(self.nb)
            self.nb.AddPage(self.page2, "PAGE 2")
            self.page2.OnLoad("PAGE 2")
        elif page_number == 2: 
            self.page3 = PageTwo(self.nb)
            self.nb.AddPage(self.page3, "PAGE 3")
            self.page3.OnLoad("PAGE 3")
        elif page_number == 3: 
            self.page4 = PageTwo(self.nb)
            self.nb.AddPage(self.page4, "PAGE 4")
            self.page4.OnLoad("PAGE 4")

class App(wx.App):

    def OnInit(self):

        self.frame = MainFrame(None, -1, "Notebook", (250,50), (500,500))
        self.frame.Show()
        return True

app = App(False)
app.MainLoop()

我在这里找到了许多有用的信息,希望有人可以帮助我解决这个问题或以正确的方式告诉我(如果我犯了一些愚蠢的错误/假设)。

我会将所有页面放在列表中,而不是将它们作为单独的属性。

def __init__(self, parent, id, title, pos, size):
    #...
    self.pages = [PageOne(self.nb)]
    #...

def OnClick(self, event):
    page = self.nb.GetPageCount() + 1
    # Or: page = len(self.pages) + 1

    self.pages.append(PageTwo(self.nb))
    self.nb.AddPage(self.pages[page], "PAGE %d" % page)
    self.pages[page].OnLoad("PAGE %d" % page)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM