如何在类之间传递工具栏

时间:2019-07-04 13:18:04

标签: python class wxpython wxauitoolbar

我正在尝试创建2个页面wx.Notebook(每个页面是wx.Panel作为一个单独的类)。 主要类为wx.Frame。当我尝试设置菜单时,它必须位于wx.Frame Main 类)之内,我的工具栏位于wx.Panel A 类)。

我在hide_show_f中打印(元素A中的z个元素)。

我想要的是,在按下可检查的隐藏显示工具菜单的同时,应隐藏然后显示工具栏2。如何成功。谢谢。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import wx
import wx.lib.agw.aui as aui

class Main ( wx.Frame ):            ### Background program which have real-time and text notebook-panels separately

    def __init__( self, parent ):
        self.parent = parent
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"Main Frame", pos = wx.DefaultPosition, size = wx.Size( 500,350 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        p = wx.Panel(self)
        nb = wx.Notebook(p)
        page1 = A(nb)
        page2 = B(nb)
        nb.AddPage(page1, "A")
        nb.AddPage(page2, "B")
        sizer = wx.BoxSizer()
        sizer.Add(nb, 1, wx.EXPAND)  
        p.SetSizer(sizer)

        self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )

        ###### view  menu
        self.menubar = wx.MenuBar( 0 )
        self.view_menu = wx.Menu()
        self.connecttool_menuItem = wx.MenuItem( self.view_menu, wx.ID_ANY, u"Hide-Show Tool", wx.EmptyString, wx.ITEM_NORMAL )
        self.view_menu.AppendCheckItem( self.connecttool_menuItem.GetId(), 'Hide-Show Tool')        

        self.menubar.Append( self.view_menu, u"View" )
        self.SetMenuBar( self.menubar )

        #Bind
        self.Bind( wx.EVT_MENU, self.hide_show_f, id = self.connecttool_menuItem.GetId() )


    def hide_show_f( self, event ):
        if event.IsChecked():
            print("hello")

            f = A(self)
            print(f.z)

            f._mgr.ClosePane(f.aui_tb2)
            f._mgr.Update()

        else:
            print("bye")


class A ( wx.Panel ):        
    def __init__( self, parent ):
        wx.Panel.__init__ ( self, parent )
        self.z = 54
        self.bSizer1 = wx.BoxSizer( wx.VERTICAL )

        ### auitoolbar 1
        self.tb1 = aui.AuiToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, agwStyle=aui.AUI_TB_DEFAULT_STYLE | aui.AUI_TB_OVERFLOW)
        self.Btn1 = wx.Button( self.tb1, wx.ID_ANY, u"Hide", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.tb1.AddControl( self.Btn1 )
        self.Btn2 = wx.Button( self.tb1, wx.ID_ANY, u"Show", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.tb1.AddControl( self.Btn2 )

        self.tb1.Realize()
        self.bSizer1.Add( self.tb1, 0, 0, 5 )

        ### auitoolbar 2
        self.tb2 = aui.AuiToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, agwStyle=aui.AUI_TB_DEFAULT_STYLE | aui.AUI_TB_OVERFLOW)
        self.Btn3 = wx.Button( self.tb2, wx.ID_ANY, u"Button", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.tb2.AddControl( self.Btn3 )
        self.tb2.Realize()
        self.bSizer1.Add( self.tb2, 0, 0, 5 )


        ### aui manager
        self._mgr = aui.AuiManager()
        self._mgr.SetManagedWindow(self)
        self.aui_tb1 = aui.AuiPaneInfo().Name("tb1").Caption("Hide-Show Tool").ToolbarPane().Top()
        self.aui_tb2 = aui.AuiPaneInfo().Name("tb2").Caption("Btn Tool").ToolbarPane().Top()
        self._mgr.AddPane(self.tb1, self.aui_tb1)
        self._mgr.AddPane(self.tb2, self.aui_tb2)
        self._mgr.Update()

        self.Btn1.Bind( wx.EVT_BUTTON, self.btn_1 )
        self.Btn2.Bind( wx.EVT_BUTTON, self.btn_2 )
        self.Btn3.Bind( wx.EVT_BUTTON, self.btn_3 )

    def btn_1(self, event):
        self._mgr.ClosePane(self.aui_tb2)
        self._mgr.Update()

    def btn_2(self, event):
        self._mgr.ShowPane(self.tb2, self.aui_tb2)
        self._mgr.Update()

    def btn_3(self, event):
        print("hello")


class B ( wx.Panel ):
    def __init__( self, parent ):
        wx.Panel.__init__ ( self, parent )

if __name__ == '__main__':
    app = wx.App()
    ex = Main(None)
    ex.Show()
    app.MainLoop()

1 个答案:

答案 0 :(得分:1)

这是self引用的用途,因此您不必再次重新定义。
使用:

self.page1 = A(nb)
self.page2 = B(nb)

对第1页和第2页参考进行适当的修改
然后:

def hide_show_f( self, event ):
    if event.IsChecked():
        print("hello")

        print(self.page1.z)

        self.page1._mgr.ClosePane(self.page1.aui_tb2)
        self.page1._mgr.Update()

    else:
        print("bye")

更好:

def hide_show_f( self, event ):
    if event.IsChecked():
        self.page1.btn_1(None)
    else:
        self.page1.btn_2(None)