2012-08-28 4 views
1

wxpython에서 wx.TextCtrl의 하위 클래스를 만들고 있습니다.wx.TextCtrl의 서브 클래스 만들기

이 클래스는 추가 데이터를 ComboBox 또는 ListBox에 추가 할 수있는 방법과 비슷한 wx.TextCtrl 위젯에 추가 데이터를 추가하려고합니다.

import wx 
class ExtraDataForTxtCtrl(wx.TextCtrl): 

    def __init(self, ExtraTextData): 
     self.ExtraTextData=ExtraTextData 


    def getExtraTCData(self): 
     return self.ExtraTextData 

    def setExtraTCData(self, ExtraTextData): 
     self.ExtraTextData=ExtraTextData 

내 문제는 내가 파이썬에 새로 온 사람과 어떻게를 구현하는 생각이 없다는 것입니다 및이 올바른지 아닌지 :

여기 내 코드입니다.

답변

2
import wx 
class ExtraDataForTxtCtrl(wx.TextCtrl): 

    def __init__(self,*args,**kwargs): 
     self.ExtraTextData=kwargs.pop("ExtraTextData") 
     wx.TextCtrl.__init__(self,*args,**kwargs) 


    def getExtraTCData(self): 
     return self.ExtraTextData 

    def setExtraTCData(self, ExtraTextData): 
     self.ExtraTextData=ExtraTextData 

가능성이 더 나은 솔루션 설정 사용하는 것입니다/getattr

class DataTxtCtrl(wx.TextCtrl): 

    def __init__(self,*args,**kwargs): 
     self.datadict = {} 
     self.ExtraTextData=kwargs.pop("ExtraTextData") 
     wx.TextCtrl.__init__(self,*args,**kwargs) 
    def __getattr__(self,attr): 
     return self.datadict[attr] 
    def __setattr__(self,attr,val): 
     self.datadict[attr]=val 

당신은 많은 변수를 설정하고 정상

a = wx.App(redirect=False) 
    f = wx.Dialog(None,-1,"Example") 
    te = DataTxtCtrl(f,-1,"some_default") 
    te.somevar = "hello" 
    te.someother = "world" 
    print te.somevar+" "+te.someothervar 
    f.ShowModal() 
+0

: Heres는

class TextDataHolder: def __init__(self, wxTextControl, data): self.wxTextControl=wxTextControl self.data=data def setDataTxt(self,data): self.wxTextControl=wxTextControl self.data=data def getDataTxt(self): return self.data 

나는 그것을 구현하는 방법)'를 사용하여'def __init __ (self, parent, extraTextData)'를 사용한다. 일부 기능을 잃게됩니다 (예 : 내 코드를 사용하면'size' 인수를 추가하지 않으면 크기를 설정할 수 없습니다). 이해하기 쉽습니다. 일반적으로'init' 내장 된 wxPython 클래스를'parent'로 설정하고 나머지는 기본값으로 둡니다. – acattle

+0

도움을 주셔서 감사합니다. 어떻게 구현해야합니까? 클래스의 이름이 subTextCtrl이라고 할 수 있습니다. subTextCtrl을 가져 와서 다음과 같이 컨트롤을 만듭니다. new_control = subTextCtrl (wx.TextCtrl (self, -1, value = "hello")))? – user1401950

+0

그냥 하위 클래스를 인스턴스화 할 것입니다 : myTxtCtrl = ExtraDataForTxtCtrl() –

0

처럼 사용하는 대신 난 그냥 서브 클래스를 생성 할 수 있습니다 추가 문자열 값을 wx.textCtrl 위젯에 연결하는 자체 클래스를 만들기로 결정했습니다.

감사합니다. :)

Heres는 내 코드 : 대신`데프 __init __ (자기 * 인수, ** kwargs로, 나는이 제안 초보자를 들어

import wx, TextDataHolder 

exampleCtrl=wx.TextCtrl(self, -1, "Hello") 
exampleData=TextDataHolder.TextDataHolder(exampleCtrl,"Sup?") 
print exampleData.getDataTxt() #prints 'Sup?' 
관련 문제