TypeError: аргумент int () должен быть строкой, байтовоподобным объектом или числом, а не ошибкой NoneType - PullRequest
1 голос
/ 27 апреля 2019

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

TypeError: аргумент int () должен быть строкой, байтовоподобным объектом или номер, а не '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".

Ответы [ 2 ]

3 голосов
/ 27 апреля 2019

Ваши обратные вызовы не имеют операторов возврата, поэтому они фактически возвращают 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 голосов
/ 27 апреля 2019

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

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

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 имеют только локальную область видимости для своих собственных функций, поэтому помещение их в функции обратного вызова кнопки ничего не делает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...