При получении значения из Entry выскакивает ошибка
У меня есть программа которая рассчитывает индекс массы тела. При получении значения из Entry выскакивает ошибка: ValueError: invalid literal for int() with base 10: '' не подскажете?
Вот код:
from tkinter import *
root = Tk()
label1 = Label(text="Введите вес (кг):")
weight = Entry(root)
label2 = Label(text="Введите рост (см):")
height = Entry(root)
w = int(weight.get())
h = int(height.get())
print(w)
print(h)
root.mainloop()
Ответы (2 шт):
У вас изначально пустая строка при вводе, поэтому и ошибка конвертации в int. То есть как такового ввода, в данном примере, нет. Это равносильно тому, что я напишу код ниже и попытаюсь его запустить:
print(int(' '))
У вас поля Entry не заполнены, поэтому при запросе значения из них вернулись пустые строки (''), что привело к ошибке при попытке привести их к числу.
Вам нужно проверять значения, например, через отлов исключения, что будет выброшено из int, если переданная в него строка не может быть конвертирована в число.
В качестве примера добавил кнопку при нажатии на которую будет выполняться получение значения из weight и height с приведением их к числу и проверкой.
Пример:
from tkinter import *
from tkinter import messagebox
def on_button_clicked():
try:
w = int(weight.get())
h = int(height.get())
except ValueError:
messagebox.showwarning("Warning", 'Поля вес и рост должны быть заполнены числами')
return
print(w)
print(h)
root = Tk()
label1 = Label(text="Введите вес (кг):")
weight = Entry(root)
label2 = Label(text="Введите рост (см):")
height = Entry(root)
button = Button(root, text="Ok", command=on_button_clicked)
label1.pack()
weight.pack()
label2.pack()
height.pack()
button.pack()
root.mainloop()