我不经常编码,因此很快忘记了一些事情。然而,我一直在修补(工作)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
请帮忙。
谢谢
沃伦
答案 0 :(得分:0)
我将原始的AUI示例作为我的应用程序的模型。经过更多的搜索后,我终于找到了另一个例子,其中页面没有添加到子函数中,而是作为frame _init代码的顶层。
我意识到我没有面板描述的实例,所以我按照这些行重新安排了代码,现在我有了pn1 = descriptionpanel,所以我可以引用pn1.OnItemSelected。
我只是一个逻辑错误。
我想我的困惑得益于缺乏AUI活动的例子。我发现的所有示例仅显示如何添加窗格和绑定菜单操作。
w ^