wxpython связь между ноутбуком и основным фреймом
У меня есть записная книжка, родитель которой является основным фреймом приложения. В основном фрейме также есть панель с диаграммой сбоку ноутбука, строка меню и строка состояния.
Записная книжка имеет пару страниц, и каждая страница имеет несколько вложенных панелей.
Мне бы хотелось, чтобы обратные вызовы для кнопок на этих панелях могли общаться с основным кадром.
На данный момент это означает нелепую цепочку "родителей". Например, чтобы перейти к строке состояния из панели на странице записной книжки, я бы сделал:
stat = self.parent.parent.parent.status_bar
Первый parent
это страница тетради, вторая parent
это ноутбук и, наконец, последний parent
это основной кадр.
Это приводит к очень тупому коду...
Естественно, вы можете увидеть, как это может ухудшиться, если я захочу поговорить между элементами на панели рядом с блокнотом или вложить блокнот в собственную панель.
Какие-нибудь советы?
2 ответа
Существует простой способ получить ваш основной кадр.
Поскольку вы можете получить экземпляр своего приложения в любом месте кода с помощью функции "wx.GetApp()", тогда вы можете установить свой мэйнфрейм в свой экземпляр приложения, это будет легко выполнить.
Пожалуйста, попробуйте следующий простой пример:
import wx
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
btn = wx.Button(wx.Panel(self), label = "test")
self.Bind(wx.EVT_BUTTON, self.onButton)
def onButton(self, evt):
print "onButton"
app = wx.GetApp()
print app.Myframe
app = wx.App()
frame = TestFrame()
frame.Center()
frame.Show()
app.Myframe = frame
app.MainLoop()
Если вам нужно получить доступ к верхнему фрейму, вы сможете использовать wx.GetTopLevelParent(). Лично я думаю, что pubsub - это, вероятно, самый простой способ вызова различных классов в wxPython, и он тоже довольно чистый. Кроме того, если вам нужно вызвать несколько фреймов или панелей или что-то еще, вы можете сделать так, чтобы все они "подписались" на одно и то же имя сообщения, а затем опубликовали сообщение, которое они могли бы забрать.
Вот учебник для pubsub: http://www.blog.pythonlibrary.org/2013/09/05/wxpython-2-9-and-the-newer-pubsub-api-a-simple-tutorial/