gpt4 book ai didi

python - wxNotebook 和 wxBoxSizer 行为

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:21 26 4
gpt4 key购买 nike

我有一个带有两个 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”的作用 =/有什么想法可以让它发挥作用吗?

编辑:好的,这适用于我的 MainFrame 类中的事件。但我也想从另一个类的事件创建一个新的 nb-page:

class ContinueApp(MainFrame):
def foo(self):
super(ContinueApp, self).CreateNewPage()

def continueapp(event):
cont = ContinueApp()
cont.foo()

最佳答案

BoxSizer(和其他 sizer)用于布置小部件,因此您不必自己定位它们。当您使应用程序窗口变大或变小时,它们还有助于控制扩展或拉伸(stretch)哪些小部件。在您的情况下,您不应将同一个小部件添加到同一个 sizer 两次。您也不应该将一个小部件添加到两个不同的 sizer。

你需要删除这个:

self.nb.AddPage(page1, "page3")
self.sizer.Add(self.nb, 1, wx.EXPAND)
self.p.SetSizer(self.sizer)

另请注意,当您应该添加 page3 时,您再次将 page1 添加到笔记本中:

page3 = PageThree(self.nb)
self.nb.AddPage(page3, "page3")

如果您想以编程方式在选项卡之间切换,您应该使用笔记本的 SetSelection 方法。我有一个示例应用程序,您可以在以下教程(或下面的答案)中查看:

切换选项卡后,您可能希望将焦点设置在该选项卡内的小部件上。我发现使用 pubsub 发送事件可能是类间通信最干净的方式。我有几个关于该主题的教程:

关于python - wxNotebook 和 wxBoxSizer 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19777527/

26 4 0
文章推荐: python - 使用字典的字典来存储常量
文章推荐: linux - 如何在/sys/class中创建bin属性文件?
文章推荐: linux - 从 bash 脚本中发送到后台的进程中检索退出代码
文章推荐: javascript - 如何在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com