Python tkinter将函数绑定到按钮

时间:2016-05-09 20:13:25

标签: python tkinter

from tkinter import *

root = Tk()
root.title("Tip & Bill Calculator")

totaltxt = Label(root, text="Total", font=("Helvitca", 16))
tiptxt = Label(root, text="Tip (%)", font=("Helvitca", 16))
peopletxt = Label(root, text="people", font=("Helvitca", 16))

totaltxt.grid(row=0, sticky=E)
tiptxt.grid(row=1, sticky=E)
peopletxt.grid(row=2, sticky=E)

totalentry = Entry(root)
tipentry = Entry(root)
peopleentry = Entry(root)

totalentry.grid(row=0, column=2)
tipentry.grid(row=1, column=2)
peopleentry.grid(row=2, column=2)

ans = Label(root, text = "ANS")
ans.grid(row=4)

def answer(event):
    data1 = totalentry.get()
    data2 = tipentry.get()
    data3 = peopleentry.get()
    if tipentry.get() == 0:
        ans.configure(str((data1/data3)), text="per person")
        return
    elif data1 == 0:
        ans.configure(text="Specify the total")
        return
    elif data3 == 0 or data3 ==1:
        ans.configure(str(data1*(data2/100+1)))
        return
    elif data1 == 0 and data2 == 0 and data3 ==0:
        ans.configure(text = "Specify the values")
        return
    else:
        ans.configure(str((data1*(data2/100+1)/data3)), text="per person")
        return

bf = Frame(root)
bf.grid(row=3, columnspan=3)
calc = Button(bf, text ="Calculate", fg = "black", command = answer)
calc.bind("<Button-1>", answer)
calc.grid(row=3, column=2)

root.mainloop()

大家好,我是python中的新手以及编程,如果你看到我的代码后没有告诉你。

我试图用一个简单的设计制作一个小费和账单计算器,只是为了学习和实验。但是,我遇到了一个令人难以忘怀的问题几天,我经常在python中使用函数而烦恼,而我&#39 ;我试图将一个函数绑定到一个计算按钮,我设法让它出现。但是,我无法让它发挥作用。当我点击计算按钮时,我发现了一些乱码,这个错误就结束了。

而且,如果你看到任何令人尴尬的错误,或者我做错了什么,请你告诉我。

单击“计算”按钮后出现错误 error

1 个答案:

答案 0 :(得分:0)

  1. 绑定到按钮的命令不会获得参数,因为已知事件的性质。删除'事件'。

  2. 您还可以将答案功能绑定到事件。结果是,在没有和带有事件参数的情况下调用答案。摆脱绑定调用。

  3. 按照布莱恩的提示。停止将数字字符串传递给.configure作为位置参数。 tk会尝试解释为字​​典。而是将数字字符串添加到标签字符串的其余部分。

  4. 与行类似,列从0开始。

  5. 不需要框架。

  6. 以下修订版有效。

    from tkinter import *
    
    root = Tk()
    root.title("Tip & Bill Calculator")
    
    totaltxt = Label(root, text="Total", font=("Helvitca", 16))
    tiptxt = Label(root, text="Tip (%)", font=("Helvitca", 16))
    peopletxt = Label(root, text="people", font=("Helvitca", 16))
    
    totaltxt.grid(row=0, column=0, sticky=E)
    tiptxt.grid(row=1, column=0, sticky=E)
    peopletxt.grid(row=2, column=0, sticky=E)
    
    totalentry = Entry(root)
    tipentry = Entry(root)
    peopleentry = Entry(root)
    
    totalentry.grid(row=0, column=1)
    tipentry.grid(row=1, column=1)
    peopleentry.grid(row=2, column=1)
    
    ans = Label(root, text = "ANS")
    ans.grid(row=4, column=0, columnspan=2, sticky=W)
    
    def answer():
        total = totalentry.get()
        tip = tipentry.get()
        people = peopleentry.get()
        if not (total and tip):
            ans['text'] = 'Enter total and tip as non-0 numbers'
        else:
            total = float(total)
            tip = float(tip) / 100
            people = int(people) if people else 1
            ans['text'] = str(round(total * tip / people, 2)) + " per person"
    
    calc = Button(root, text ="Calculate", fg = "black", command = answer)
    calc.grid(row=3, column=1)
    
    root.mainloop()