2016-08-28 15 views
1

は、私は、Pythonに、私は電卓を作成しようとしていますチュートリアルの助けを借りて、かなり新しいですが、私は、私は数字ボタンを押したときに発生する修正することができませんエラーが原因で捕まってしまったクラスオブジェクトには属性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' 

が是正ください数字ボタンを押したときに、これは誤りであることであれば、事前にありがとうござい 間違い

答えて

2

まずあなたが隠しを削除する必要がありますあなたのコードにはいくつかの問題があります。 __init__に2つのウィンドウが作成され、そのうちの1つにのみmainloopが実行されているため、グローバルを__init__に入れてください。また、self.stringを最初にインスタンスを作成した後にStringVarクラスオブジェクトで上書きします。だからあなたの__init__はそう

... 
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 
... 

、あなたのaddにあなたがself.string.getselfを渡す必要はありません、それはそれは、これらの変更は、あなたの例外を修正するが、私は推測

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

ようになっているはずであるようになります。計算機にはまだまだ論理的な間違いがありますが、これは質問の内容ではなく、修正することでPythonを学ぶのに役立たないでしょう。

関連する問題