全球名称' fetch'未定义(GUI TKINTER PYTHON)

时间:2017-11-09 22:33:44

标签: python python-2.7 tkinter

我的教授为我们的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}  
          />,
    };
};

1 个答案:

答案 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一起工作