我的教授为我们的INTRO TO PYTHON CLASS分配了一个GUI编程问题。我一直在"全球名称' fetch'没有定义"作为错误代码。如何解决此错误代码?
问题:创建投资价值计算器)编写一个程序,以指定的年数计算给定利率的投资的未来价值。计算公式如下:
from Tkinter import *
fields = ('Investment Amount', 'Years', 'Interest Rate', 'Future Value')
def future_value(entries):
# period rate:
r = float(int(entries['Investment Amount'].get())*(1+int(entries['Interest Rate'].get()))^int(entries['Years'].get())*12)
entries['Future Value'].delete(0,END)
entries['Future Value'].insert(0, r)
def makeform(root, fields):
entries = {}
for field in fields:
row = Frame(root)
lab = Label(row, width=22, text=field+": ", anchor='w')
ent = Entry(row)
ent.insert(0,"0")
row.pack(side=TOP, fill=X, padx=5, pady=5)
lab.pack(side=LEFT)
ent.pack(side=RIGHT, expand=YES, fill=X)
entries[field] = ent
return entries
if __name__ == '__main__':
root = Tk()
ents = makeform(root, fields)
root.bind('<Return>', (lambda event, e=ents: fetch(e)))
b1 = Button(root, text='Calculate',
command=(lambda e=ents: future_value(e)))
b1.pack(side=LEFT, padx=5, pady=5)
b3 = Button(root, text='Quit', command=root.quit)
b3.pack(side=LEFT, padx=5, pady=5)
root.mainloop()
使用文本字段为用户输入投资金额,年限和利率。当用户单击“计算”按钮时,在文本字段中显示未来金额。
这是我到目前为止所做的:
static navigationOptions = ({ navigation }) => {
return {
title: (
<Text
numberOfLines = {2}
>
Let's see how long the title can be
</Text>
),
headerTitleStyle:
{
color: Colors.ORANGE,
},
headerTintColor: Colors.ORANGE,
headerRight:
<MenuIcon
navigation = {navigation}
/>,
};
};
答案 0 :(得分:0)
在这一行。 。 。
root.bind('<Return>', (lambda event, e=ents: fetch(e)))
。 。 。您正在调用未在代码中声明的函数fetch()
。
您希望做的事情是获取您在Entry
内声明的makeform()
窗口小部件的值。如果您正在尝试按照我期望的那样做,而您想要的就是Entry
窗口小部件中的值,那么您需要使用.get()
,但即使您这样做,您仍然会在entries
上调用它{1}}。 {\ n} {}在您的计划中,entries
等于。 。
{'Investment Amount': <tkinter.Entry object .!frame.!entry>}
。 。 。这是一个字典,而不是一个tkinter小部件,因此无法在其上调用.get()
。调用e['Investment Amount'].get()
将返回您想要的值,但就是这样。返回值。什么都没有。无缘无故。
如果你想对返回的值做任何事情,那么你需要以某种方式实际处理它,最容易(主观上说)的方式是使用从绑定调用的函数。将程序移动到面向对象的样式也是值得的,同样这是主观的,但是当使用面向对象的方法(在大多数情况下主观地说)时,它使“更容易”与tkinter一起工作