在wx.Python.aui中,如何在窗格之间检测/传递事件?

时间:2013-05-06 20:19:42

标签: wxpython

我不经常编码,因此很快忘记了一些事情。然而,我一直在修补(工作)python和wx.python几年,最后遇到了AGW.AUI,并认为升级我的一些内部应用程序会很有用。但是,我现在有一个打嗝。如何在通过aui.AUIManager()加载然后隐藏或显示的面板之间检测/传递事件?

我有一个使用wxpython的小应用程序:

    class paneldescription(wx.Panel):

      ….panel layout with a list

      self.grid.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)

      def OnItemSelected(self, evt)


    class WorkingPanel(wx.Panel):

      ….panel layout of multiple  wx.StaticText and wxTextCtrl


    class MyFrame(wx.Frame):

       b = workbook()

       pnl1 = paneldescription()
       pnl2 = WorkingPanel()

       b.add pnl1
       b.add pnl2

      self.pnl1.grid.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)

      def OnItemSelection(self, evt):

        get selected item from pnl1
        set data in pnl2

这在wx.Frame中效果很好。现在我将它转换为AUI并添加更多面板。我如何能 1)在paneldescription中检测OnItemSelect 2)将其传递给WorkingPanel

使用AUI经理吗?

在我第一次尝试时,我只是将上面的Bind语句复制到AUI代码中。它告诉我没有名为pnl1的项目。

然后我将其改为:

   self._mgr.GetPane("LocList").grid.Bind(wx.EVT_LIST_ITEM_SELECTED,
   self.OnLocSelected)

LocList由:

创建
    self._mgr.AddPane(self.CreateLocCtrl(), aui.AuiPaneInfo().Name("LocList").
    Caption("Location List").CenterPane().CloseButton(False).MinimizeButton(False))

返回

  AuiPaneInfo has no object  grid  (grid is the name of the list in the initial panel.)

当我删除该引用时,它会返回

  AuiPaneInfo has no object Bind

请帮忙。

谢谢

沃伦

1 个答案:

答案 0 :(得分:0)

我将原始的AUI示例作为我的应用程序的模型。经过更多的搜索后,我终于找到了另一个例子,其中页面没有添加到子函数中,而是作为frame _init代码的顶层。

我意识到我没有面板描述的实例,所以我按照这些行重新安排了代码,现在我有了pn1 = descriptionpanel,所以我可以引用pn1.OnItemSelected。

我只是一个逻辑错误。

较新的示例位于http://www.blog.pythonlibrary.org/2009/12/09/the-%E2%80%9Cbook%E2%80%9D-controls-of-wxpython-part-2-of-2/

我想我的困惑得益于缺乏AUI活动的例子。我发现的所有示例仅显示如何添加窗格和绑定菜单操作。

w ^

相关问题