Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为wx.TextCtrl创建子类_Python_Wxpython_Wxwidgets - Fatal编程技术网

Python 为wx.TextCtrl创建子类

Python 为wx.TextCtrl创建子类,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,我正在为wxpython中的wx.TextCtrl创建一个子类 我希望这个类向wx.TextCtrl小部件添加额外数据,类似于向组合框或列表框添加额外数据的方式 这是我的密码: import wx class ExtraDataForTxtCtrl(wx.TextCtrl): def __init(self, ExtraTextData): self.ExtraTextData=ExtraTextData def getExtraTCData(self):

我正在为wxpython中的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
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
我的问题是,我是python新手,不知道如何实现它,也不知道它是否正确

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()

我没有创建子类,而是决定创建自己的类,该类将额外的字符串值链接到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
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?'  

对于初学者,我建议使用
def\uu init\uuuuu(self,*args,**kwargs)
,而不是
def\uuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。您失去了一些功能(例如,使用“我的代码”,除非添加
size
参数,否则无法设置大小),但这更容易理解。通常,当
init
ing内置wxPython类时,您只需设置
parent
就可以了,其余的都是默认值。谢谢您的帮助,我该如何实现它呢?假设类的名称是subTextCtrl,我是否导入subTextCtrl并创建如下控件:new_control=subTextCtrl(wx.TextCtrl(self,-1,value=“hello”)?您只需实例化子类:myTxtCtrl=extradatafortextctrl(),Mike简化了一点,我认为它应该是
myTxtCtrl=exradatafortextctrl(somePanel,someId,“默认为某些文本”,ExtraTextData={'Some':extra,'Text':data})
;然后您可以将其视为正常的textctrl…顺便说一句,欢迎使用wxPython,它太棒了!