2013-08-15 4 views
1

하나의 상단 패널과 수직 스플리터 윈도우가있는 프레임이있는 파이썬 GUI가 있습니다. splitterwindow의 각 Panel에 대해 두 개의 Panel 클래스를 작성했습니다. 하나는 목록 상자이고 다른 하나는 격자입니다. 각 클래스에는 몇 개의 버튼이 있습니다.Python, 다른 클래스 내부에서 인스턴스 메서드를 호출하는 방법

은, 현재 나는 다음과 같은 오류를 받고 있어요 때문에 클래스 내부 event.bind 및 기능 코드를 연결 버튼을 유지하고 작동하게하는 방법이있다인가 :

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

는 내가 알고 싶은 보고 된 상황에서 가장 좋은 방법입니다. 나는 당신의 Source_Panel 예를 내가 참조거야 (A MyFrame 인스턴스의 자식이 될 것이라고 가정하는거야

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

:

이것은 내가 쓴 것을 짧은 예 예이다 Frame을 으로 설정하여 wx.Frame 기본 클래스와 혼동하지 않도록하십시오.

이 경우 Source_Panel 인스턴스의 Parent 속성은 부모 MyFrame을 참조해야합니다.

그럼 그냥 호출 할 수

self.Parent.m_datapanel.m_dirPicker1.GetTextCtrlValue() 
+0

네 말이 맞아. 도와 줘서 고마워. 나는 뭔가 유용한 것을 읽을 때 또 다른 주제를 찾고있었습니다. 또한 사용할 수 있습니다 : self.m_frame = 프레임 (없음) 다음 src_directory = self.m_frame.m_dirPicker1.GetTextCtrlValue(). 내가 봤다 정확히 똑같은 것을 볼 수 ... 친절 관해서 .Ivo – TMoover

+0

위대하다, 'wx.Panel'을 서브 클래스 화하기 때문에'Source_Panel'을 인스턴스화 한 후에'self.Parent' 속성이 이미 존재해야합니다. 새로운 속성'self.m_frame'을 지정할 필요가 없습니다. –

+0

지적 해 주셔서 감사합니다. 친절합니다. Ivo – TMoover

관련 문제