Python 类对象没有属性tk?

Python 类对象没有属性tk?,python,tkinter,python-3.4,Python,Tkinter,Python 3.4,我对python相当陌生,在教程的帮助下,我试图创建一个计算器,但由于按下数字按钮时出现的一个错误,我无法纠正,因此被卡住了 from tkinter import * root=Tk() root.title("Yuvi's CAl") global char class cal(): def __init__(self): self.string= StringVar() root=Tk() root.title("Yuvi's C

我对python相当陌生,在教程的帮助下,我试图创建一个计算器,但由于按下数字按钮时出现的一个错误,我无法纠正,因此被卡住了

from tkinter import *
root=Tk()
root.title("Yuvi's CAl")
global char

class cal():

    def __init__(self):
        self.string= StringVar()
        root=Tk()
        root.title("Yuvi's CAl")
        self.string=StringVar
        enter=Entry(root,textvariable=self.string)
        enter.grid(row=0,column=0,columnspan=6)
        values=["1","2","3","4","5","+","6","7","=","8","9","c"]
        row=1
        col=0
        i=0
        for txt in values:
            if i==3:
                row=3
                col=0
            if i==6:
                row=4
                col=0
            if i==9:
                row=5
                col=0

            if txt=="+":
                but=Button(root,text=txt)
                but.grid(row=row,column=col)
            elif txt=="=":
                but=Button(root,text=txt,command=lambda:self.equals)
                but.grid(row=row,column=col) 
            elif txt=="c":
                but=Button(root,text=txt,command=lambda:self.clr)
                but.grid(row=row,column=col)
            else:
                but=Button(root,text=txt,command=lambda txt=txt:self.add(txt))
                but.grid(row=row,column=col) 

            col+=1
            i+=1
    def add(self,char):
            meet=self.string.get(self)
            self.string.set((str(meet)) + (str(char)))


    def equals(self):
            result=eval(self.string.get())
            self.string.set(result)
    def clr(self):
            self.string.set("")

ent=cal()

root.mainloop()
Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1541, in __call__
    return self.func(*args)
  File "/home/yuvi/Documents/LiClipse Workspace/GUI/src/Misiio_calcuator.py", line 40, in <lambda>
    but=Button(root,text=txt,command=lambda txt=txt:self.add(txt))
  File "/home/yuvi/Documents/LiClipse Workspace/GUI/src/Misiio_calcuator.py", line 46, in add
    meet=self.string.get(self)
  File "/usr/lib/python3.4/tkinter/__init__.py", line 339, in get
    value = self._tk.globalgetvar(self._name)
AttributeError: 'cal' object has no attribute '_tk'
这就是我按数字键时的错误

from tkinter import *
root=Tk()
root.title("Yuvi's CAl")
global char

class cal():

    def __init__(self):
        self.string= StringVar()
        root=Tk()
        root.title("Yuvi's CAl")
        self.string=StringVar
        enter=Entry(root,textvariable=self.string)
        enter.grid(row=0,column=0,columnspan=6)
        values=["1","2","3","4","5","+","6","7","=","8","9","c"]
        row=1
        col=0
        i=0
        for txt in values:
            if i==3:
                row=3
                col=0
            if i==6:
                row=4
                col=0
            if i==9:
                row=5
                col=0

            if txt=="+":
                but=Button(root,text=txt)
                but.grid(row=row,column=col)
            elif txt=="=":
                but=Button(root,text=txt,command=lambda:self.equals)
                but.grid(row=row,column=col) 
            elif txt=="c":
                but=Button(root,text=txt,command=lambda:self.clr)
                but.grid(row=row,column=col)
            else:
                but=Button(root,text=txt,command=lambda txt=txt:self.add(txt))
                but.grid(row=row,column=col) 

            col+=1
            i+=1
    def add(self,char):
            meet=self.string.get(self)
            self.string.set((str(meet)) + (str(char)))


    def equals(self):
            result=eval(self.string.get())
            self.string.set(result)
    def clr(self):
            self.string.set("")

ent=cal()

root.mainloop()
Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1541, in __call__
    return self.func(*args)
  File "/home/yuvi/Documents/LiClipse Workspace/GUI/src/Misiio_calcuator.py", line 40, in <lambda>
    but=Button(root,text=txt,command=lambda txt=txt:self.add(txt))
  File "/home/yuvi/Documents/LiClipse Workspace/GUI/src/Misiio_calcuator.py", line 46, in add
    meet=self.string.get(self)
  File "/usr/lib/python3.4/tkinter/__init__.py", line 339, in get
    value = self._tk.globalgetvar(self._name)
AttributeError: 'cal' object has no attribute '_tk'
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.4/tkinter/\uuuuu init\uuuuuu.py”,第1541行,在调用中__
返回self.func(*args)
文件“/home/yuvi/Documents/LiClipse Workspace/GUI/src/Misiio_calculator.py”,第40行,在
但是=按钮(root,text=txt,command=lambda-txt=txt:self.add(txt))
文件“/home/yuvi/Documents/LiClipse Workspace/GUI/src/Misiio_calculator.py”,第46行,添加
meet=self.string.get(self)
get中第339行的文件“/usr/lib/python3.4/tkinter/_init__.py”
value=self.\u tk.globalgetvar(self.\u name)
AttributeError:“cal”对象没有属性“\u tk”
如果有错误,一定要改正
提前感谢您

您的代码有几个问题。首先,您应该删除在
\uuuu init\uuuu
中隐藏全局变量,因为它会创建两个窗口,并且只为其中一个窗口运行
mainloop
。此外,在首次创建类对象的实例之后,可以使用类对象覆盖
self.string
。所以你的
\uuuuu init\uuuuuu
看起来是这样的

...
def __init__(self):
    self.string=StringVar()
    enter=Entry(root,textvariable=self.string)
    enter.grid(row=0,column=0,columnspan=6)
    values=["1","2","3","4","5","+","6","7","=","8","9","c"]
    row=1
    col=0
    i=0
...
然后在您的
添加
中,您不必将
self
传递给
self.string.get
,也就是说

...
def add(self,char):
    meet=self.string.get()
    self.string.set((str(meet)) + (str(char)))
...
这些更改修复了您的异常,但我想计算器中还有其他逻辑错误,但这不是问题所在,修复这些错误不会帮助您学习python