2010-04-10 3 views
1

자, 저는 정말 파이썬 (프로그래밍 자체)에 익숙하지 않아서 내 무지를 유감스럽게 생각합니다.하지만 정말 물어볼 필요가있었습니다. 그래서 저는 wxPython 프로젝트에서 노트북 (탭의 각 탭 = 클래스)을위한 탭을 몇 개 추가하고 탭 (예 : Tab1)을 호출 할 수있는 체크 박스를 추가 한 탭 하나가 있습니다. 나는 누군가가 그것을 검사 할 때, 다른 탭 (예를 들어 tab2라고 불리는 클래스)에 존재하는 버튼이 이전에 보여지고 있던 곳에 숨겨지기를 원한다.Python의 클래스와 관련된 문제

글쎄,이게 어렵지는 않지만 내 문제는 클래스 (이 예제에서는 tab1과 tab2)입니다. 나는 그것을 찾아 내려고 노력하고 있었지만, 나는 그것을 올바르게 이해할 수 없기 때문에 열심히 수색하지 않고 있다고 생각한다. 그들이 같은 반에 있다면 나는 문제가 없지만 그들은 다른 반에 속해 있기 때문에 이것으로 커다란 투쟁을하고 있습니다.

누군가가 나를 도울 수 있기를 바랍니다. 그리고 내 무지를 다시 한번 미안합니다.

편집 : 죄송합니다. 보이지 않거나 숨겨지기보다는 오히려 활성화/비활성화되었습니다.

class Tab2(wx.Panel): 
    def __init__(self, parent): 
    ..... 
     self.jaddbutton = wx.Button(self,-1, label ="Button", size = (160,24)) 
     self.jaddbutton.Bind(wx.EVT_BUTTON, self.jaddbuttonclick, self.jaddbutton) 
    def jaddbuttonclick(self, event): 
     .... 
class Tab1(wx.Panel): 
    def __init__(self, parent): 
     self.jdcheck = wx.CheckBox(self, -1, 'Disable') 
     self.jdcheck.Bind(wx.EVT_CHECKBOX, self.checkoptions, self.jdcheck) 
    def checkoptions(self,event): 
     checkboxval = self.jdcheck.GetValue() 
     if checkboxval == False: 
      self.jaddbutton.Disable() # This is what I want to do but it is on the other class 

     else: 
      self.jaddbutton.Enable() # Same as above 

class TextFrame(wx.Frame): 
    def __init__(self): 
     p = wx.Panel(self) 
     self.nb = wx.Notebook(p, size = (750, 332)) 
     #Tabs 
     tab1 = Tab1(self.nb) 
     tab2 = Tab2(self.nb) 
     self.nb.AddPage(tab1, "ssomething") 
     self.nb.AddPage(tab2, "somethingr") 
+1

문제를 이해하는 것이 정말 어렵습니다. 정교하게 주시겠습니까? 수업에서 겪고있는 문제는 무엇입니까? 코드 샘플 또한 유용 할 수 있습니다. – jathanism

+0

코드로 편집 됨 – dpswt

답변

5

parent 참조 (노트북)를 저장 다른 페이지 (탭). 그래서 그 대신 self.jaddbutton.Disable() 등, 당신은 예컨대, 사용하는 것 : 등

othertab = self.parent.GetPage(1) 
othertab.jaddbutton.Disable() 

하고 있습니다.

+0

이봐, 고마워! 당신은 말 그대로 내 문제를 해결했습니다! 협조 해 주셔서 다시 한 번 감사드립니다. – dpswt

+0

@Francisco, 언제나 도움이 되서 기쁩니다! –

+0

@Francisco : 안녕하세요. 유용한 답변을 upvote하는 것이 관례입니다 (위쪽을 향한 화살표 클릭). – bernie

6

이것은 클래스 질문보다 wxpython 질문과 비슷합니다. 일반적으로, 파이썬에서 tab1은 tab2의 버튼을 숨기기 위해 tab2에 대한 핸들을 필요로합니다. 또는 tab1이 tab2의 설정에 영향을 줄 수있는 부모 클래스 또는 공유 모델 클래스와 같은 일부 공유 리소스에 대한 핸들이 필요합니다 (버튼 숨기기 등). PyQt는 핸들을 반드시 포함하지 않는 클래스 들간의 통신을 가능하게하는 이벤트 시스템을 제공합니다. wxpython에서 통신하는 일반적인 "받아 들인"방법은 무엇입니까?

다음은 공유 상위 솔루션의 매우 추상적 인 예입니다. 당신이 어떤에서 노트북의 x 번째 페이지 (즉, 탭)에 액세스

class Tab1(wx.Panel): 
    def __init__(self, parent): 
     self.parent = parent 
     ...etc, etc... 

그런 다음, self.parent.GetPage(x)가 있습니다 : 탭 '__init__에서

class Parent(object): 

    def create_tabs(): 
     self.tab1 = Tab1(self) 
     self.tab2 = Tab2(self) 

    def hide_tab2_button(): 
     self.tab2.hide_button() 


class Tab1(object): 
    def __init__(self, parent): 
     self.parent = parent 

    def on_checkbox_checked(self): 
     self.parent.hide_tab2_button() 


class Tab2(object): 
    def __init__(self, parent): 
     self.parent = parent 

    def hide_button(self): 
     self.button.hide() # Or whatever the wxpython command is to hide a button. 
+0

감사합니다. 당신이 나를 많이 도왔습니다! – dpswt

+0

@Francisco, 오신 것을 환영합니다! –