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/

Другие вопросы по тегам