StringVar.set在模块包中不起作用

时间:2017-06-05 19:55:38

标签: tkinter module packages subclassing

我试图编写一个GUI界面来帮助加快工作中的文书工作。我一直在创建自定义类,继承自tkinter的类以及我编写的小部件类。当我将整个模块写在一个.py文件中时,一切正常。现在,我将它作为一个包分成几个文件,它将不再允许我在widget.__init__

中创建的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而不是变量,并允许self.text用于获取或设置文本值。正如我所说,它在单个模块中有效,但现在它在一个包中,它会抛出:

TclError: can't set "PY_VARX"

任何建议表示赞赏。谢谢!

0 个答案:

没有答案