【问题标题】:wxpython communication between notebook and main frame笔记本和主机之间的wxpython通信
【发布时间】:2023-03-07 19:12:01
【问题描述】:

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

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

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

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

stat = self.parent.parent.parent.status_bar

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

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

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

有什么建议吗?

【问题讨论】:

    标签: python wxpython nested wxnotebook


    【解决方案1】:

    有一个简单的方法来获取你的主框架。

    由于您可以使用“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()
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-22
        • 1970-01-01
        • 2013-07-28
        • 2013-02-22
        • 1970-01-01
        • 2019-04-22
        • 2019-05-08
        • 1970-01-01
        相关资源
        最近更新 更多