У меня есть графический интерфейс Python с фреймом, который имеет одну верхнюю панель и вертикальный splitterwindow. Для каждой панели в splitterwindow я создал два класса Panel, один со списком, а другой с сеткой. У каждого класса есть несколько кнопок.Python, Как вызвать метод экземпляра изнутри другого класса
Есть ли способ держать кнопку подключения 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):
...
Вы правы. Спасибо за помощь. Я смотрел другую тему, когда я читал что-то полезное. Я также могу использовать: self.m_frame = Frame (None), а затем src_directory = self.m_frame.m_dirPicker1.GetTextCtrlValue(). Я вижу, что это точно то же, что вы написали ... С уважением. Иво – TMoover
отлично, просто обратите внимание, что поскольку вы подклассифицируете 'wx.Panel', атрибут' self.Parent' должен уже существовать после создания экземпляра 'Source_Panel' - вам не нужно назначать новый атрибут' self.m_frame'. –
Спасибо, что указал на это. С уважением. Ivo – TMoover