Python,如何从另一个Class内部调用实例方法

时间:2013-08-15 15:25:02

标签: python

我有一个带有Frame的Python GUI,它有一个上面板和一个垂直splitterwindow。对于splitterwindow中的每个Panel,我创建了两个Panel类,一个带有列表框,另一个带有网格。每个班级都有几个按钮。

是否有办法让按钮连接event.bind和功能代码在类中并使其工作,因为,目前我收到以下错误:

AttributeError: 'Panel' object has no attribute 'm_dirPicker1'

我想知道在报道的情况下哪种是最佳做法。

这是我写的一个简短例子:

class Frame ( wx.Frame ):
    ...
    self.m_datapanel = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
    self.m_filespanel = Source_Panel( self.m_splitter1)
    self.m_gridpanel = Data_Viewer( self.m_splitter1)

class Source_Panel ( wx.Panel ):
    ...

        # Connect Events
        self.m_listBox.Bind( wx.EVT_LISTBOX_DCLICK, self.m_listBoxOnListBoxDClick )
        self.m_clearbutton.Bind( wx.EVT_BUTTON, self.m_clearbuttonOnButtonClick )
        self.m_importbutton.Bind( wx.EVT_BUTTON, self.m_importbuttonOnButtonClick )
        self.m_showdata.Bind( wx.EVT_BUTTON, self.m_showdataOnButtonClick )

    def __del__( self ):
        pass

    # Virtual event handlers, overide them in your derived class
    def m_listBoxOnListBoxDClick( self, event ):
        event.Skip()

    def m_clearbuttonOnButtonClick( self, event ):
        event.Skip()

    def m_importbuttonOnButtonClick( self, event ):
        src_directory = frame.m_datapanel.m_dirPicker1.GetTextCtrlValue()

    def m_showdataOnButtonClick( self, event ):
        event.Skip()


class Data_Viewer ( wx.Panel ):
    ...

1 个答案:

答案 0 :(得分:1)

我将假设您的Source_Panel个实例将是MyFrame个实例的孩子(我将Frame称为MyFrame避免与wx.Frame基类混淆。

在这种情况下,Parent个实例的Source_Panel属性应引用父MyFrame

然后你可以打电话:

self.Parent.m_datapanel.m_dirPicker1.GetTextCtrlValue()