我正在尝试在 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的了解有限,还在学习中!如果可以以一种非常优雅的方式实现目标,那就太高兴了!