Tkinter StringVar.set赢得';t在模块包中工作

Tkinter StringVar.set赢得';t在模块包中工作,tkinter,module,packages,subclassing,Tkinter,Module,Packages,Subclassing,我正在尝试编写一个GUI界面,以帮助加快工作中的文书工作。我一直在创建自定义类,继承tkinter的类以及我编写的小部件类。当我把整个模块写在一个.py文件中时,一切正常。现在,我已经将它作为一个包拆分为几个文件,它不再允许我在小部件中创建的StringVar对象上使用.set方法 class widget: def __init__(self,master,text=None,trace=None): self.master = master sel

我正在尝试编写一个GUI界面,以帮助加快工作中的文书工作。我一直在创建自定义类,继承tkinter的类以及我编写的小部件类。当我把整个模块写在一个.py文件中时,一切正常。现在,我已经将它作为一个包拆分为几个文件,它不再允许我在
小部件中创建的StringVar对象上使用.set方法

 class widget:

    def __init__(self,master,text=None,trace=None):
        self.master = master
        self._text = StringVar(self.master,value=text)

        self._trace = trace
        self.trace = self._trace

    @property
    def text(self):
        return self._text.get()
    @text.setter
    def text(self,val):
        self._text.set(val)

    @property
    def trace(self):
        return self._trace
    @trace.setter
    def trace(self,val):
        self._trace = val
        self._text.trace('w', lambda *args, **kwargs:val(*args,**kwargs))
所有小部件子类都继承自小部件类。这允许他们都使用textvariable而不是variable,并允许self.text用于获取或设置文本值。正如我所说,它在单个模块中工作,但现在它在一个包中,它给出了抛出:

TclError:无法设置“PY\u VARX”


任何建议都将不胜感激。谢谢

这里没有足够的代码。我们需要一份工作。我猜您正在创建多个
Tk
实例。“widget”类本身必须从另一个tkinter基类(如条目)继承属性。因此,类widget(Entry):可能是您的widget类应该如何定义的。然后必须将StringVar绑定到条目的textvariable属性。这是由self.configure(textvariable=self.\u text)完成的。我同意布莱恩的观点,这里没有足够的信息来理解你真正想做什么。谢谢你的建议。当我试图创建一个最小的、完整的、可验证的示例时,我意识到问题是我所做的一个更改,在我进行故障排除时不知怎么逃过了我的注意。我自己解决了这个问题,实际上我是以相反的方式继承的。entry(entry,widget)是我定义它的方式。widget类的存在是为了给所有类型的widget提供某些属性(主要是StringVar)。