0

我正在尝试在 wxpython 中构建这个 GUI 工具作为我项目的一部分。我有一个基本框架,它有一个拆分器窗口(wx.SplitterWindow 对象),水平拆分。首次打开应用程序时,它将仅显示带有一些文本的拆分器窗口。我还有一个菜单,其中包含绑定到相应事件处理程序的各种菜单项。现在,当我第一次单击特定的菜单项时,我需要创建一个新的 wx.Notebook 对象,其中包含与该事件处理程序相关的信息的页面,位于框架(wx.SplitterWindow 对象)。通常,我希望在旧内容之上创建一个新面板,这将是笔记本对象的父级。随后每次单击菜单项都应在笔记本中创建一个新页面。我可以知道如何实现吗?

以下是我编写的必要代码片段,但我在某处出现了严重错误:

此代码创建由两个面板组成的初始拆分器窗口:

    self.splitter = wx.SplitterWindow(self, id = wx.ID_ANY)
    self.panel1 = wx.Panel(self.splitter, id = wx.ID_ANY)
    self.panel2 = wx.Panel(self.splitter, id = wx.ID_ANY)
    self.panel1.SetBackgroundColour(wx.LIGHT_GREY)
    self.splitter.SplitHorizontally(self.panel1, self.panel2)

第一个菜单项单击事件的代码:

def displayNodes(self,event):
    if hasattr(self, "notebook") == False: #If the notebook object has not been already created
        #create notebook if it does not exitst already. This script should be present in every event handler
        self.panel = wx.Panel(self,wx.ID_ANY)
        self.notebook = NotebookDemo(self.panel)
        #creating vertical sizer for the notebook
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.notebook, 1, wx.ALL|wx.EXPAND, 5)
        self.panel.SetSizer(self.sizer)
    self.nodesname = "nodes"
    self.nodesinstance = wx.SingleInstanceChecker(self.nodesname)
    if self.nodesinstance.IsAnotherRunning():
        self.notebook.ChangeSelection(self.nodesindex)
    else:
        #creating a tab
        self.nodesTab = TabPanel(self.notebook)
        self.notebook.AddPage(self.nodesTab, "List of all the nodes")
        self.nodes = wx.ListBox(self.nodesTab, 11, (10,40), (200,130), self.nodeslist, wx.LB_SINGLE)
        self.nodesindex = self.notebook.GetPageCount() - 1
        self.notebook.SetSelection(self.nodesindex)
        #self.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup)

PS:我对wxpython的了解有限,还在学习中!如果可以以一种非常优雅的方式实现目标,那就太高兴了!

4

1 回答 1

0

您可能可以使用我在面板切换教程中谈到的方法:http: //www.blog.pythonlibrary.org/2010/06/16/wxpython-how-to-switch-between-panels/

或者,您可以显示/隐藏笔记本对象,检查哪个是活动的,然后将选项卡添加到活动的对象,而不是替换面板。

于 2012-09-14T13:20:54.293 回答