【问题标题】:Math Functions in Python Tkinter, and error messagePython Tkinter 中的数学函数和错误消息
【发布时间】:2013-10-26 01:32:52
【问题描述】:

我必须用 Tkinter 在 Python 中创建一个 5 函数计算器,它处理 2 个变量并提供一个出口。还需要有错误消息。我已经布置了计算器并定义了功能,但没有任何反应。此外,任何想法如何添加错误消息。现在,当您按下按钮时,错误消息(插入函数的名称)缺少 1 个必需的位置参数:'app'。我完全被卡住了,无法弄清楚。我显然对此很陌生。我相信这很简单。谢谢!

from tkinter import *    
from math import *
app = Tk()
app.title('Calculator')
app.geometry('400x500')

Label(app, text = "Welcome to Calculator 2013. Enjoy!").pack(padx = 10, pady = 10) 
Label(app, text = "Enter both of your variables and then pick your computations below.").pack(pady = 10)   

global var1, var2, total
Label(text='First Variable').pack()
var1 = Entry()
var1.insert(0,0)
var1.pack()
Label(text='Final Variable').pack()
var2 = Entry()
var2.insert(0,0)
var2.pack()
Label(text='Total').pack()
Total = Entry()
Total.pack()


def add():
    global var1, var2, total
    first = float(var1.get())
    second = float(entry.get())
    total = first + second
    total.delete(0,END)
    total.insert(0, str(total))      
def subtract(app):
    global var1, var2, total
    first = float(var1.get())
    second = float(var2.get())
    total = first - second
    total.delete(0,END)
    total.insert(0, str(total))
def divide(app):
    global var1, var2, total
    first = float(var1.get())
    second = float(var2.get())
    total = first / second
    total.delete(0,END)
    total.insert(0, str(total))
def multiply(app):
    global var1, var2, total
    first = float(var1.get())
    second = float(var2.get())
    total = first * second
    total.delete(0,END)
    total.insert(0, str(total))
def clear(app):
    global var1, var2, total
    var1.delete(0,END)
    var2.delete(0,END)
    total.delete(0,END)
def quit(app):
    app.destroy()


b_add = Button(app, text="+", bg="green", fg="black", width = 5, font=12, command = add).pack(side=LEFT)
b_sub = Button(app, text="-", bg="red", fg="white", width = 5, font=12, command = subtract).pack(side=LEFT)
b_sub = Button(app, text="*", bg="blue", fg="white", width = 5, font=12, command = multiply).pack(side=LEFT)
b_div = Button(app, text="/", bg="yellow", fg="black", width = 5, font=12, command = divide).pack(side=LEFT)
b_clear = Button(app, text="Clear", bg="black", fg="white", width = 5, font=12, command = clear).pack(side=LEFT)
b_exit = Button(app, text="Exit?", bg="white", fg="red", width = 40, font=12, command = quit).pack(side=LEFT)


app.protocol("WM_DELETE_WINDOW", quit)
app.mainloop()

【问题讨论】:

  • 欢迎来到 StackOverflow!感谢您发布您的代码,但请在您的问题中添加更多描述:您遇到什么问题,您期望的结果是什么,到目前为止what have you tried?通过question checklist 将帮助我们更好地回答您的问题。谢谢!
  • @ChristianTernus 听了马丁的建议? ;)

标签: python math tkinter calculator


【解决方案1】:

错误消息“缺少 1 个必需的位置参数:‘app’。”源于您已经定义了大多数函数来接受名为“app”的参数,但是当您按下按钮时,您并没有传递该参数。简单的解决方案是从定义中删除 app功能。

例如,这样做:

def multiply():
    ...

而不是这样:

def multiply(app):
    ...

【讨论】:

  • 非常感谢!现在我已经解决了这个问题,但是我收到了这个错误消息'float' object has no attribute 'delete' line 33
  • @user2921919:也许你打算使用Total.delete()?您有名为 totalTotal 的变量,它们的含义不同。
  • 我不知道这很重要。谢谢。尽管进行了更正,但它仍然会给出错误消息。
  • @user2921919:调试的第一条规则是相信错误消息是真实的。如果它说“x 没有属性 y”,那只能意味着一件事:你有一个对象 x,你正在尝试访问属性 y,而 x 没有这样的属性。然后你只需要问自己“为什么?”。 x 应该具有属性 y 并且您未能创建它,或者 x 不是您认为的那样。通常是后者。如果你得到“x 没有属性 y”,那么你对 x 的假设是错误的。再次问自己“为什么?”。
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
相关资源
最近更新 更多