Встроить отдельные графические интерфейсы WX в закладки ноутбука
В основном у меня есть 3 отдельных графических интерфейса wxPython, которые я хотел бы объединить в одно приложение, предоставив каждому графическому интерфейсу свою вкладку для ноутбука. Я не совсем уверен, как это сделать, и ищу несколько советов. Я ценю любые комментарии или мысли, которые я могу получить.
Моя идея состоит в том, что это должно выглядеть примерно так:
import wx
import OtherFrame
class PageOne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
panel=OtherFrame.Panel(parent)
box = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(self,box)
panel.Layout(self, parent)
class PageTwo(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageTwo object", (40,40))
class PageThree(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageThree object", (60,60))
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Simple Notebook Example")
p = wx.Panel(self)
nb = wx.Notebook(p)
page1 = PageOne(nb)
page2 = PageTwo(nb)
page3 = PageThree(nb)
nb.AddPage(page1, "Page 1")
nb.AddPage(page2, "Page 2")
nb.AddPage(page3, "Page 3")
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
p.SetSizer(sizer)
if __name__ == "__main__":
app = wx.App()
MainFrame().Show()
app.MainLoop()
Но это дает несколько ошибок и сбоев. Без классификаторов под PageOne он просто помещает серый квадрат в верхний правый угол, а с ними он вылетает.
Заранее спасибо!
2 ответа
Я предполагаю, что в каждом из ваших фреймов есть панели с нужным вам кодом. Просто возьмите код для виджетов из каждого из этих фреймов и поместите их в каждый из классов Page. Вам, вероятно, придется изменить родителей виджетов на "себя" вместо "панели" или как вы их называете.
Тогда вы не будете открывать фрейм в каждой базе кода страницы. Вы не хотите открывать рамку там. Вы хотите, чтобы страница была родителем виджетов, а не открывала что-то еще.
Благодаря вашей помощи я получил это, чтобы работать на меня. Поскольку каждое из моих других wx-приложений имело классы Panel со всеми необходимыми виджетами, мне не нужно было создавать классы для каждой страницы. Вот код:
import wx
import OtherFrame1
import OtherFrame2
import OtherFrame3
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Simple Notebook Example")
p = wx.Panel(self)
nb = wx.Notebook(p)
page1 = OtherFrame1.Panel(nb)
page2 = OtherFrame2.Panel(nb)
page3 = OtherFrame3.Panel(nb)
nb.AddPage(page1, "Page 1")
nb.AddPage(page2, "Page 2")
nb.AddPage(page3, "Page 3")
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
p.SetSizer(sizer)
if __name__ == "__main__":
app = wx.App(redirect=False)
MainFrame().Show()
app.MainLoop()
Спасибо за помощь!