我有一个带有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 ):
...
答案 0 :(得分:1)
我将假设您的Source_Panel
个实例将是MyFrame
个实例的孩子(我将Frame
称为MyFrame
避免与wx.Frame
基类混淆。
在这种情况下,Parent
个实例的Source_Panel
属性应引用父MyFrame
。
然后你可以打电话:
self.Parent.m_datapanel.m_dirPicker1.GetTextCtrlValue()