1

我有一个笔记本,其父级是应用程序的主框架。主框架还有一个面板,显示笔记本侧面的图表、一个菜单栏和一个状态栏。

笔记本有几页,每页都有一些嵌套面板。

我希望这些面板中的按钮回调能够与主框架对话。

目前,这意味着一个可笑的“父母”链。例如,要从笔记本页面上的面板进入状态栏,我会这样做:

stat = self.parent.parent.parent.status_bar

第一个parent是笔记本页面,第二个parent是笔记本,最后parent是主框架。

这会导致非常迟钝的代码......

如果我想在与笔记本相邻的面板上的元素之间进行对话或将笔记本嵌套在它自己的面板中,您自然会看到这可能会变得更糟。

有小费吗?

4

2 回答 2

0

有一种简单的方法可以获取您的主框架。

由于您可以使用“wx.GetApp()”在代码中的任何位置获取您的应用程序实例,因此您可以将 Mainframe 设置到您的应用程序实例中,这很容易实现。

请尝试以下简单示例:

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()
于 2014-03-12T10:13:25.283 回答
0

如果您需要访问顶部框架,您应该能够使用 wx.GetTopLevelParent()。就个人而言,我认为 pubsub 可能是在 wxPython 中调用各种类的最简单的方法,而且它也很干净。另外,如果您需要调用多个框架或面板或其他任何内容,您可以让它们都“订阅”相同的消息名称,然后发布一条消息供所有人接收。

这是 pubsub 的教程:http: //www.blog.pythonlibrary.org/2013/09/05/wxpython-2-9-and-the-newer-pubsub-api-a-simple-tutorial/

于 2014-03-12T20:39:07.207 回答