Python 修改SV函数

Python 修改SV函数,python,tkinter,Python,Tkinter,我试图修改StringVar(),以便能够记住以前的数据 class sv(sv): def __init__(self): self.svm_history = [] self._name = StringVar() def SVM_set(self): if self._names: if svm_value!=self._name: self.svm_history.a

我试图修改
StringVar()
,以便能够记住以前的数据

class sv(sv):
    def __init__(self):
        self.svm_history = []
        self._name = StringVar()

    def SVM_set(self):
        if self._names:
            if svm_value!=self._name:
                self.svm_history.append(self._name)
                self._name = svm_value

    def SVM_undo(self):    
        return self.svm_history[-2]

我做错了什么?

确保调用父类型的
\uuuu init\uuuu
;在进行此操作时,还应添加必要的参数:

class StringV_Memory (StringVar):
    def __init__ (self, master=None, value=None, name=None):
        StringVar.__init__(self, master, value, name)

        # the rest of your code
这样做将确保正确初始化必要的内容;您的错误应该会消失。

此外,您使用Tkinter StringVar的方式错误。您正在使用StringVar覆盖self.\u name,您不应该这样做,因为您继承了StingVar。然后将其用作变量,而不使用
.set()
.get()

我建议您使用下面的代码,这允许用户使用常规的
.set()
.get()
方法,并添加
.undo()
方法。请注意,现在撤消实际上并不会更改该值,它只返回当前值之前的最后一个值


班级:

class StringV_Memory(StringVar):
    def __init__(self, master=None, value=None, name=None):
        StringVar.__init__(self, master, value, name)
        self._tk.globalsetvar(self._name, value)
        self.svm_history = []
        self.svm_value = None 

    def set(self, svm_value):
        try:
            old = self.get()
        except TclError:
            # During Variable.__init__() set() is called but there is nothing to get yet
            # this will yield a TclError which you can catch and initialize the StringVar with an empty string
            self._tk.globalsetvar(self._name, '')
        else:
            if svm_value != old:
                self.svm_history.append(old)
                self._tk.globalsetvar(self._name, svm_value)

    def undo(self):    
        return self.svm_history[-1]
您可以像这样使用:

root = Tk()
a = StringV_Memory(root)

a.set('1')
a.set('2')
a.set('3')

print a.get()
print a.undo()

root.mainloop()

沃特?您的异常与您的代码不相关请将您的完整错误回溯和导致异常的代码添加到您的问题中!这和Tkinter有关-我忘了添加。等一下,我来编辑!编辑!对不起!非常感谢。不过,这是可行的,撤销操作并不正确-您如何实现迭代撤销,以便每次运行撤销操作时,都将值重置为以前的值?我试图修改你的代码,但没有任何运气