我正在尝试在wxpython中构建这个GUI工具,作为我项目的一部分。我有一个基本框架,有一个分割窗口(wx.SplitterWindow对象),水平分割。首次打开应用程序时,它将仅显示带有一些文本的拆分器窗口。我还有一个菜单,其中包含与各个事件处理程序绑定的各种菜单项。现在,当我第一次点击某个特定的菜单项时,我需要一个新的wx.Notebook对象来创建一个页面,该页面托管与该事件处理程序相关的信息,在该已存在的内容之上。 frame(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的了解有限,我还在学习!如果能够以一种优雅的方式实现目标,那将非常高兴!
答案 0 :(得分:0)
您可以使用我在面板切换教程中讨论的方法:http://www.blog.pythonlibrary.org/2010/06/16/wxpython-how-to-switch-between-panels/
或者不是替换面板,您可以显示/隐藏Notebook对象,检查哪一个是活动的,并将标签添加到活动对象。