python 中的计算器程序 returns tkinter 错误
Calculator program returns tkinter error in python
我正在尝试为计算器编写一个界面非常简单的程序。我仍然需要向它添加一些功能,但是,到目前为止我测试了我的代码并且我得到了一个非常奇怪的 tkinter 错误。你能向我解释一下问题是什么吗?
这是错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "/home/user/PycharmProjects/application /App1.py", line 8, in process
number1 = Entry.get(E1)
File "/usr/lib/python3.6/tkinter/__init__.py", line 2682, in get
return self.tk.call(self._w, 'get')
AttributeError: 'NoneType' object has no attribute 'tk'
这是我的代码:
from tkinter import *
import tkinter
import tkinter.messagebox
def process():
try :
number1 = Entry.get(E1)
number2 = Entry.get(E2)
operator = Entry.get(E3)
number1 = int (number1)
number2 = int ( number2)
if operator == "+" :
answer = number1 + number2
Entry.insert(E4,0,answer)
print(answer)
except ValueError:
tkMessageBox.showwarning("Warning", "Please enter the value in integer")
top = tkinter.Tk()
L1 = Label(top, text ='My calculator',).grid(row = 0 , column = 1)
L2 = Label (top, text = "Number 1",).grid(row = 1 , column = 0)
L3 = Label (top, text = 'Number 2',).grid (row = 2, column = 0)
L4 = Label (top, text = 'Operator',) . grid (row=3, column = 0)
L5 = Label (top, text = 'Answer:',) . grid ( row = 4, column = 0)
E1 = Entry (top, bd = 5,).grid( row = 1 , column = 1)
# OR : E1.grid(row = 1, column = 1)
E2 = Entry ( top , bd = 5,).grid( row = 2, column = 1)
E3 = Entry ( top, bd = 5,).grid(row = 3, column = 1)
E4 = Entry ( top, bd = 5,).grid(row=4, column= 1 )
B = Button(top, text = "Submit here: ", command = process).grid (row = 5 , column = 1,)
top.mainloop()
您确定 Entry.get(...)
是正确的吗,即 get
是一个 static/class 方法,还是您应该创建 Entry
的实例并调用 get
在那?
.grid()
方法returnsNone
。你应该做的是 E1= Entry(top, bd=5)
然后 E1.grid(row=1,column=1)
错误会自行解决。
问题
.grid()
方法 returns None
,因此您将 None
分配给您的变量。您应该将它们分成两行,例如:
而不是:
E1 = Entry (top, bd = 5,).grid( row = 1 , column = 1)
使用:
E1 = Entry(top, bd = 5,)
E1.grid( row = 1 , column = 1)
使用from tkinter import messagebox
代替import tkinter.messagebox
。
最少的工作代码
下面应该是经过最小改动的工作代码
from tkinter import *
import tkinter
from tkinter import messagebox
def process():
try :
number1 = Entry.get(E1)
number2 = Entry.get(E2)
operator = Entry.get(E3)
number1 = int(number1)
number2 = int(number2)
if operator == "+" :
answer = number1 + number2
Entry.insert(E4,0,answer)
print(answer)
except ValueError:
messagebox.showwarning("Warning", "Please enter the value in integer")
top = tkinter.Tk()
L1 = Label(top, text ='My calculator',)
L1.grid(row = 0 , column = 1)
L2 = Label(top, text = "Number 1",)
L2.grid(row = 1 , column = 0)
L3 = Label(top, text = 'Number 2',)
L3.grid(row = 2, column = 0)
L4 = Label(top, text = 'Operator',)
L4.grid(row=3, column = 0)
L5 = Label(top, text = 'Answer:',)
L5.grid( row = 4, column = 0)
E1 = Entry(top, bd = 5,)
E1.grid( row = 1 , column = 1)
E2 = Entry( top , bd = 5,)
E2.grid( row = 2, column = 1)
E3 = Entry( top, bd = 5,)
E3.grid(row = 3, column = 1)
E4 = Entry( top, bd = 5,)
E4.grid(row=4, column= 1 )
B = Button(top, text = "Submit here: ", command = process)
B.grid(row = 5 , column = 1,)
top.mainloop()
我正在尝试为计算器编写一个界面非常简单的程序。我仍然需要向它添加一些功能,但是,到目前为止我测试了我的代码并且我得到了一个非常奇怪的 tkinter 错误。你能向我解释一下问题是什么吗? 这是错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "/home/user/PycharmProjects/application /App1.py", line 8, in process
number1 = Entry.get(E1)
File "/usr/lib/python3.6/tkinter/__init__.py", line 2682, in get
return self.tk.call(self._w, 'get')
AttributeError: 'NoneType' object has no attribute 'tk'
这是我的代码:
from tkinter import *
import tkinter
import tkinter.messagebox
def process():
try :
number1 = Entry.get(E1)
number2 = Entry.get(E2)
operator = Entry.get(E3)
number1 = int (number1)
number2 = int ( number2)
if operator == "+" :
answer = number1 + number2
Entry.insert(E4,0,answer)
print(answer)
except ValueError:
tkMessageBox.showwarning("Warning", "Please enter the value in integer")
top = tkinter.Tk()
L1 = Label(top, text ='My calculator',).grid(row = 0 , column = 1)
L2 = Label (top, text = "Number 1",).grid(row = 1 , column = 0)
L3 = Label (top, text = 'Number 2',).grid (row = 2, column = 0)
L4 = Label (top, text = 'Operator',) . grid (row=3, column = 0)
L5 = Label (top, text = 'Answer:',) . grid ( row = 4, column = 0)
E1 = Entry (top, bd = 5,).grid( row = 1 , column = 1)
# OR : E1.grid(row = 1, column = 1)
E2 = Entry ( top , bd = 5,).grid( row = 2, column = 1)
E3 = Entry ( top, bd = 5,).grid(row = 3, column = 1)
E4 = Entry ( top, bd = 5,).grid(row=4, column= 1 )
B = Button(top, text = "Submit here: ", command = process).grid (row = 5 , column = 1,)
top.mainloop()
您确定 Entry.get(...)
是正确的吗,即 get
是一个 static/class 方法,还是您应该创建 Entry
的实例并调用 get
在那?
.grid()
方法returnsNone
。你应该做的是 E1= Entry(top, bd=5)
然后 E1.grid(row=1,column=1)
错误会自行解决。
问题
.grid()
方法 returnsNone
,因此您将None
分配给您的变量。您应该将它们分成两行,例如:而不是:
E1 = Entry (top, bd = 5,).grid( row = 1 , column = 1)
使用:
E1 = Entry(top, bd = 5,) E1.grid( row = 1 , column = 1)
使用
from tkinter import messagebox
代替import tkinter.messagebox
。
最少的工作代码
下面应该是经过最小改动的工作代码
from tkinter import *
import tkinter
from tkinter import messagebox
def process():
try :
number1 = Entry.get(E1)
number2 = Entry.get(E2)
operator = Entry.get(E3)
number1 = int(number1)
number2 = int(number2)
if operator == "+" :
answer = number1 + number2
Entry.insert(E4,0,answer)
print(answer)
except ValueError:
messagebox.showwarning("Warning", "Please enter the value in integer")
top = tkinter.Tk()
L1 = Label(top, text ='My calculator',)
L1.grid(row = 0 , column = 1)
L2 = Label(top, text = "Number 1",)
L2.grid(row = 1 , column = 0)
L3 = Label(top, text = 'Number 2',)
L3.grid(row = 2, column = 0)
L4 = Label(top, text = 'Operator',)
L4.grid(row=3, column = 0)
L5 = Label(top, text = 'Answer:',)
L5.grid( row = 4, column = 0)
E1 = Entry(top, bd = 5,)
E1.grid( row = 1 , column = 1)
E2 = Entry( top , bd = 5,)
E2.grid( row = 2, column = 1)
E3 = Entry( top, bd = 5,)
E3.grid(row = 3, column = 1)
E4 = Entry( top, bd = 5,)
E4.grid(row=4, column= 1 )
B = Button(top, text = "Submit here: ", command = process)
B.grid(row = 5 , column = 1,)
top.mainloop()