从Entry中抓取一个数字并使用Tkinter进行计算

时间:2016-04-18 17:09:42

标签: python user-interface tkinter

我正在为我的编程简介课程完成最后的项目,而且我最难使用Tkinter和Python。

这是我的任务: 让用户从他们的薪水中输入他们的收入。然后,该计划将进行以下计算:他们60%的收入用于支出,什么是两个短期和长期储蓄的10%,以及他们20%的无薪支出薪水?

一旦程序完成计算,它将显示每个计算,以便用户可以使用他们的帐户进行适当的转移。

以下是我目前的代码:

from tkinter import *
from tkinter import ttk

def calculate(*args):
    try:
        value = float(income.get())
        expenses.set(value * .60)
        shortSavings.set(value * .10)
        longSavings.set(value * .10)
        guiltFree.set(value * .20)

    except ValueError:
        pass

root = Tk()
root.title("Monthly Finance Calculater")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

income = StringVar()
expenses = StringVar()
shortSavings = StringVar()
longSavings = StringVar()
guiltFree = StringVar()

income_entry = ttk.Entry(mainframe, width=7, textvariable=income)
income_entry.grid(column=2, row=1, sticky=(W, E))

expenses = ttk.Entry(mainframe, width=7, textvariable=expenses)
expenses.grid(column=2, row=1, sticky=(W, E))

ttk.Label(mainframe, textvariable=income).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)

income_entry.focus()
root.bind('<Return>', calculate)

root.mainloop()

我一直在寻找好几天,而且我完全陷入困境。我不希望这样做,但我真的可以使用一些指导和建议,如何使用Tkinter在GUI中完成这项工作。

2 个答案:

答案 0 :(得分:1)

Max已经提到过一个问题。第二个问题是这个问题:

except ValueError:
    pass

很明显,如果你传递一个例外,你什么都得不到。至少使用一个打印,这样您就会得到控制台中显示的错误:

except Exception as ex:
    print(ex)

我看到的最后一个真正的问题是你使用变量expenses两次!第一次作为StringVar(),第二次作为Entry。最后你没有StringVar,因为你覆盖它。 还要考虑标记你的托管,因为用户还不知道他在那里进入了什么。此外,学习如何在eclipse中使用调试器,它比你想象的要容易得多。所以你可以自己找到bug。祝你的项目好运。

答案 1 :(得分:0)

据我所见,是:

income_entry = ttk.Entry(mainframe, width=7, textvariable=income)
income_entry.grid(column=2, row=1, sticky=(W, E))

expenses = ttk.Entry(mainframe, width=7, textvariable=expenses)
expenses.grid(column=2, row=0, sticky=(W, E))

位于同一列和行上,这意味着一个不可见,将两者中的一个更改为另一行,因此它显示两个输入字段。

这可能解决了为什么你没有看到任何东西,但是我不确定你的意思。