TypeError: аргумент int () должен быть строкой, байтовым объектом или числом, а не ошибкой NoneType.

1

Я новичок в Tkinter, и он говорит, что нужно преобразовать в строку, но мой ввод является целым числом, и когда я запускаю, он дает мне эту ошибку:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

import tkinter as tk

window9 = tk.Tk()
msrp = tk.IntVar()
amgpage = tk.Label(window9, text="Mercedes Benz AMG Depreciation Calculator").pack(anchor='center')

amgpage = tk.Label(window9, text="What is the MSPR of the car?: ")
amgpage.pack()

msrp = tk.Entry(window9)
msrp.pack()

msrp.focus_set()

def callback():
    value=(msrp.get())

b = tk.Button(window9, text="Save your msrp value", command=callback,fg="red")
b.pack()
amgpage = tk.Label(window9, text="What is the age of the car?: ")
amgpage.pack()

old = tk.Entry(window9)
old.pack()
old.focus_set()
def callback2():
    age=(old.get())

b = tk.Button(window9, text="Save the age of the car", command=callback2,fg="blue")
b.pack()    
amgpage = tk.Label(window9, text="")
amgpage.pack(anchor='w')
def msrpv():
    m = callback()
    p = int(m)
    a = callback2()
    n = int(a)
    a=p*(1-0.15)**n
    amgpage=tk.Label(window9,text="$"+a)
    amgpage.pack()


amgmsrp = tk.Button(window9, text="Get the current value of the car.", command=msrpv,fg="green")
amgmsrp.pack()


window9.geometry("400x400")

window9.title("Mercedes Benz AMG Depreciation Calculator")

window9.mainloop()

Я хочу использовать числа, которые мне дают пользователи, и вставить это в уравнение, которое я использовал в программе «a = p * (1-0.15) ** n».

1
  • callback2()не возвращает None ... То же самое для callback... Возможно, вам следует использовать переменные возраста и значения напрямую вместо 27 апр '19 в 0:19
3

У ваших обратных вызовов нет операторов возврата, поэтому они фактически возвращаются None. Итак, в этих строках:

m = callback()
p = int(m)
a = callback2()
n = int(a)

mи aоба получают назначение None, так что вы звоните int(None). Вы, вероятно, хотите сделать что-то вроде:

def callback():
    value=(msrp.get())
    return value

а также

def callback2():
    age=(old.get())
    return age
2

Вам вообще не нужны «обратные вызовы».

Получите значения напрямую

def msrpv():
    p = int(msrp.get()) 
    n = int(old.get())
    a=p*(1-0.15)**n
    amgpage=tk.Label(window9,text="$"+a)
    amgpage.pack()

Обратите внимание, что valueи ageтолько локально привязаны к их собственным функциям, поэтому их включение в обратные вызовы кнопок ничего не делает.