2012-08-28 49 views
1

我正在爲wxpython中的wx.TextCtrl創建子類。爲wx.TextCtrl創建子類

我想要這個類添加額外的數據到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 

我的問題是,我是新來的Python,而且不知道如何實現這一點,如果它的正確與否。

回答

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 

可能是一個更好的解決辦法是使用set/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

對於一個初學者,我建議,而不是'高清__init __(自我,* ARGS,** kwargs )',使用'def __init __(self,parent,extraTextData)'。你失去了一些功能(例如,使用我的代碼,除非你添加'size'參數,否則你不能設置它的大小),但是它更容易理解。通常情況下,只要在初始化內置的wxPython類時設置'parent'並讓其餘的爲默認即可。 – acattle

+0

感謝您的幫助,我該如何去實施它?可以說這個類的名字是subTextCtrl,我導入subTextCtrl並創建一個控件,如下所示:new_control = subTextCtrl(wx.TextCtrl(self,-1,value =「hello」))? – user1401950

+0

你只是實例化子類:myTxtCtrl = ExtraDataForTxtCtrl() –

0

而不是創建一個子類我只是決定創建我自己的類,它將一個額外的字符串值鏈接到wx.textCtrl小部件。

感謝所有人的貢獻! :)

繼承人我的代碼:

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 

繼承人我是如何實現它:

import wx, TextDataHolder 

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