我有一个带有两个wxNotebook元素的GUI,如下所示:
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY,
"My App",size=(800,600),pos=((wx.DisplaySize()[0]-800)/2,(wx.DisplaySize()[1]-600)/2),style= wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX)
self.SetBackgroundColour((232,232,232))
self.p = wx.Panel(self,size=(800,6300),pos=(0,0))
self.SetPages()
def SetPages(self):
self.nb = wx.Notebook(self.p,style=wx.NB_BOTTOM)
page1 = PageOne(self.nb)
page2 = PageTwo(self.nb)
self.nb.AddPage(page1, "page1")
self.nb.AddPage(page2, "page2")
self.sizer = wx.BoxSizer()
self.sizer.Add(self.nb, 1, wx.EXPAND)
self.p.SetSizer(self.sizer)现在,我想创建第三个笔记本页面&在某一特定事件中集中精力关注它。但这是行不通的:
def CreateNewPageEvent(self, event):
self.CreateNewPage()
def CreateNewPage(self):
page3 = PageThree(self.nb)
self.nb.AddPage(page3, "page3")我必须承认,我不知道"BoxSizer“=/有什么想法能让这件事奏效吗?
编辑:好的,这适用于我的大型机类中的一个事件。但我还想从另一个类的事件中创建一个新的nb页面:
class ContinueApp(MainFrame):
def foo(self):
super(ContinueApp, self).CreateNewPage()
def continueapp(event):
cont = ContinueApp()
cont.foo()发布于 2013-11-04 21:44:56
BoxSizer (和其他sizer)是用来布局小部件的,所以您不必自己定位它们。当您使应用程序窗口更大或更小时,它们还有助于控制哪些小部件展开或扩展。在您的示例中,不应该向同一个sizer添加两次相同的小部件。您也不应该将一个小部件添加到两个不同的sizer中。
您需要删除以下内容:
self.nb.AddPage(page1, "page3")
self.sizer.Add(self.nb, 1, wx.EXPAND)
self.p.SetSizer(self.sizer)还请注意,当您应该添加page1时,再次将page3添加到笔记本中:
page3 = PageThree(self.nb)
self.nb.AddPage(page3, "page3")如果要以编程方式在选项卡之间切换,则应使用笔记本的SetSelection方法。我有一个示例应用程序,您可以在下面的教程中查看(或者下面的答案):
一旦切换了选项卡,您可能希望将焦点设置在该选项卡中的一个小部件上。我发现使用pubsub发送事件可能是类间最干净的通信方式。我有几本关于这个主题的教程:
发布于 2013-11-10 20:01:13
这将帮助您,只需单击"GoTo蓝面板“按钮。
import wx
import wx.lib
import wx.lib.flatnotebook as FNB
class MyFlatNotebook(FNB.FlatNotebook):
def __init__(self, parent):
mystyle = FNB.FNB_DROPDOWN_TABS_LIST|\
FNB.FNB_FF2|\
FNB.FNB_SMART_TABS|\
FNB.FNB_X_ON_TAB
super(MyFlatNotebook, self).__init__(parent, style=mystyle)
# Attributes
self.textctrl = wx.TextCtrl(self, value="edit me", style=wx.TE_MULTILINE)
self.blue = wx.Panel(self)
self.blue.SetBackgroundColour(wx.BLUE)
# Setup
self.AddPage(self.textctrl, "Text Editor")
self.AddPage(self.blue, "Blue Panel")
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
# Make some buttons
vbox = wx.BoxSizer(wx.VERTICAL)
hbox = wx.BoxSizer(wx.HORIZONTAL)
button = wx.Button(self, wx.ID_OK, "GoTo Blue Panel")
self.Bind(wx.EVT_BUTTON, self.OnButton, button)
hbox.Add(button, 0, wx.ALL, 5)
self.nb = MyFlatNotebook(self)
vbox.Add(hbox, 0, wx.EXPAND)
vbox.Add(self.nb, 1, wx.EXPAND)
self.SetSizer(vbox)
def OnButton(self, event):
self.nb.SetSelection(1)
if __name__=='__main__':
app = wx.App(False)
frame = MyFrame(None, -1, "NoteTest")
frame.Show()
app.MainLoop()https://stackoverflow.com/questions/19777527
复制相似问题