我试图从Python 3.4中的一个输入框中简单地添加一个答案,但不断收到以下错误。 Tkinter回调中的例外
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
File "H:\guitest.py", line 12, in calculate
enter3.configure(text=answer)
AttributeError: 'NoneType' object has no attribute 'configure'
#Imports The Default Graphical Library
import tkinter
from tkinter import *
#Addition Function
def calculate():
""" take the two numbers entered and process them """
firstnum=int(number1.get())
secondnum=int(number2.get())
answer=firstnum+secondnum
enter3.configure(text=answer)
return
#Creates Graphical Window
window = Tk()
# Assigns a Name To the Graphical Window
window.title("MY GUI")
# Set the Graphical Window Size
window.geometry("500x200")
number1=StringVar()
number2=StringVar()
label1 = Label(text='1st Number').place(x=50,y=30)
label2 = Label(text='2nd Number').place(x=150,y=30)
label3 = Label(text='ANSWER').place(x=100,y=80)
enter1 =Entry(width=10,textvariable=number1).place(x=50,y=50)
enter2 =Entry(width=10,textvariable=number2).place(x=150,y=50)
enter3 =Entry(width=10).place(x=100,y=100)
#Creates Button
w = Button(text='ADD',bd=10,command=calculate).place(x=100,y=150)
#Executes the above Code to Create the Graphical Window
window.mainloop()
答案 0 :(得分:0)
这里至少有三个问题。
应该持有UI元素的变量(例如label1
,entry3
)实际上并不持有它们。它们设置为None
。 place
方法未返回正在放置的对象。它只是做放置。因此,您需要将初始化策略更改为:
enter3 = Entry(width=10)
enter3.place(x=100,y=100)
如果你认为非流畅的风格不那么优雅,我同意......但显然place
不会返回对象,所以你不能做 en passant 创作和安置。
entry3.configure(text=answer)
不起作用,因为answer
不是字符串。这是一个整数。您需要entry3.configure(text=str(answer))
。至少。
我撒了谎。这也不会起作用,因为configure
不是通常设置Entry
小部件文本的方式。请尝试改为:
entry3.delete(0, END) # delete whatever's there already
entry3.insert(0, str(answer))
entry3.update() # make sure update is flushed / immediately visible
参见例如有关Entry
个对象的更多信息,请this tutorial。虽然明确的widget.update()
电话看起来很笨拙,但请相信我 - 当事情没有像您认为的那样更新时,它们会变得非常方便。
我不确定你为什么要使用混合策略。对于输入,您使用StringVar
个对象,但随后转移到答案小部件的原始更新。并不是说它不起作用......但是设置number3 = StringVar()
并将其作为textvariable
的{{1}},然后entry3
添加可能会更容易更新它。选择你的毒药。
即使您进行了这些更改,您也需要做一些工作才能获得“好”的Tk应用,但这些应用至少可以使更新正常运行,并让您继续前进。