1

我不经常编码,因此很快就会忘记一些事情。然而,几年来我一直在修补(工作)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

请帮忙。

谢谢

沃伦

4

1 回答 1

0

我将原始 AUI 示例作为我的应用程序的模型。经过更多搜索,我终于找到了另一个示例,其中页面不是添加在子功能中,而是框架_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

于 2013-05-07T16:10:03.190 回答