В данной заметке не будет хакерских методик или получения информации из различных источников. Здесь я хочу показать, как, хотя бы на базовом уровне использовать библиотеку Tkinter. Зачем она в Python, наверное, понятно, хотя иногда достаточно и командной строки. Вывод информации в графическом виде бывает удобнее для восприятия информации. Тем более, что с помощью данной библиотеки можно так же выводить различные графики и таблицы. Но об этом, как-нибудь в следующий раз. А пока, давайте посмотрим, как можно использовать его на базовом уровне и создадим простейшее приложение, которое будет считать индекс массы тела, который позволяет оценить, есть ли у человека лишний вес. Результаты можно оценить в специальной таблице, но у врачей слишком много градаций для такой простой программы. Поэтому, используем ее упрощенный вариант.
Для начала надо понять, как рассчитывается индекс массы тела. Для удобства будем называть его ИМТ. Формула расчета такова:
Для начала импортируем библиотеку в нашу программу. Делается это с помощью команды:
Что означает импортирование всех функций из библиотеки, чтобы мы могли использовать их без ограничений в программе. Также необходимо импортировать метод messagebox, который будет использоваться для вывода окна с результатом и сообщения об ошибках, если пользователь не ввел один или несколько показателей.
Полностью блок импорта будет выглядеть следующим образом:
После этого создадим окно приложения, для чего воспользуемся модулемTk.
Так же, у приложения есть заголовок, куда мы выведем название нашего приложения:
Для того, чтобы приложение было по центру экрана, необходимо определить ширину и высоту экранной области, также указать ширину и высоту окна приложения, сделать расчеты координат и разместить окно уже по данным расчетам с помощью window.geometry:
Так как у нашего приложения будут два поля ввода, надписи к этим полям и кнопка для запуска расчета, необходимо создать виджет Frame для того, чтобы можно было контролировать элементы, а точнее их расположение. Используем pack для того, чтобы можно было позиционировать элементы интерфейса внутри контейнера. И обозначим отступы по горизонтали и вертикали внутри фрейма, с помощью padx и pady.
Добавим поля ввода и надписи к ним. Используем frame в качестве заготовки и укажем текст, который должен быть выведен на экран в надписи.
Здесь же используем метод grid, который указывает, что надпись должна располагаться в третьей строке и первом столбце фрейма.
Теперь поместим во фрейм поля ввода, по аналогии с надписями, но будет использовать виджет Entry:
Следующим шагом будет добавление кнопки, при нажатии на которую будет выполнятся расчет индекса массы тела.
Здесь мы видим свойство command, которое указывает, какую функцию использовать в расчетах при нажатии на кнопку. Давайте напишем ее и разместим в начале нашего приложения, сразу за блоком импорта.
Назовем функцию calc_imt(). В нее не передается никаких параметров, но с помощью данной функции мы будем считывать данные из полей ввода, конвертировать их в числа, выполнять расчет и выводить результат на экран.
Для начала проверим, не являются ли поля ввода пустыми, так как в противном случае производить расчеты будет не с чем:
Также необходимо проверить, не ввел ли пользователь не число, а букву. Сделаем мы это с помощью перехвата исключения ValueError, когда не числовое значение не может быть конвертировано, и выведем соответствующее сообщение.
Затем необходимо считать данные из полей ввода и выполнить расчет. После выполнения расчета проверим с помощью условия if…elif число, которое получилось в результатах расчета, в соответствии с чем выведем сообщение пользователю с нужным сообщением.
Добавим последний штрих для того, чтобы наше приложение могло запуститься. Добавим в конец программы строку, которая запускает цикл событий:
Теперь наша программа полностью готова. Давайте запустим ее и проверим результат. Вот что получилось у меня:
Как видите, в данном контексте использования библиотека Tkinter довольно проста, однако, она позволяет делать и более сложные вещи и оформлять программы оконными интерфейсами.
Ну и теперь полный код программы для расчета индекса массы тела:
Код программы в прикрепленном вложении, а также таблица, по которой делалась интерпретация результата.
Спасибо за внимание! Надеюсь, данная информация будет вам полезна!
Для начала надо понять, как рассчитывается индекс массы тела. Для удобства будем называть его ИМТ. Формула расчета такова:
[B]ИМТ = вес (кг) / рост2 (метры)[/B]
Для начала импортируем библиотеку в нашу программу. Делается это с помощью команды:
Python:
from tkinter import *
Что означает импортирование всех функций из библиотеки, чтобы мы могли использовать их без ограничений в программе. Также необходимо импортировать метод messagebox, который будет использоваться для вывода окна с результатом и сообщения об ошибках, если пользователь не ввел один или несколько показателей.
Python:
from tkinter import messagebox
Полностью блок импорта будет выглядеть следующим образом:
Python:
from tkinter import *
from tkinter import messagebox
После этого создадим окно приложения, для чего воспользуемся модулемTk.
Python:
window = Tk()
Так же, у приложения есть заголовок, куда мы выведем название нашего приложения:
Python:
window.title("Индекс массы тела (калькулятор)")
Для того, чтобы приложение было по центру экрана, необходимо определить ширину и высоту экранной области, также указать ширину и высоту окна приложения, сделать расчеты координат и разместить окно уже по данным расчетам с помощью window.geometry:
Python:
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()
window_width = 400
window_height = 300
x = (screen_width // 2) - (window_width // 2)
y = (screen_height // 2) - (window_height // 2)
window.geometry(f"{window_width}x{window_height}+{x}+{y}")
Так как у нашего приложения будут два поля ввода, надписи к этим полям и кнопка для запуска расчета, необходимо создать виджет Frame для того, чтобы можно было контролировать элементы, а точнее их расположение. Используем pack для того, чтобы можно было позиционировать элементы интерфейса внутри контейнера. И обозначим отступы по горизонтали и вертикали внутри фрейма, с помощью padx и pady.
Python:
frame = Frame(window, padx = 10, pady = 10)
frame.pack(expand=True)
Добавим поля ввода и надписи к ним. Используем frame в качестве заготовки и укажем текст, который должен быть выведен на экран в надписи.
Python:
height_imt = Label(frame, text="Введите свой рост (в см) ")
height_imt.grid(row=3, column=1)
weight_imt = Label(frame, text="Введите свой вес (в кг) ",)
weight_imt.grid(row=4, column=1)
Здесь же используем метод grid, который указывает, что надпись должна располагаться в третьей строке и первом столбце фрейма.
Теперь поместим во фрейм поля ввода, по аналогии с надписями, но будет использовать виджет Entry:
Python:
height_fr = Entry(frame,)
height_fr.grid(row=3, column=2)
weight_fr = Entry(frame,)
weight_fr.grid(row=4, column=2, pady=5)
Следующим шагом будет добавление кнопки, при нажатии на которую будет выполнятся расчет индекса массы тела.
Python:
cal_Button = Button(frame, text='Рассчитать ИМТ', command=calc_imt)
cal_Button.grid(row=5, column=2)
cal_Button.grid(row=5, column=2)
Здесь мы видим свойство command, которое указывает, какую функцию использовать в расчетах при нажатии на кнопку. Давайте напишем ее и разместим в начале нашего приложения, сразу за блоком импорта.
Назовем функцию calc_imt(). В нее не передается никаких параметров, но с помощью данной функции мы будем считывать данные из полей ввода, конвертировать их в числа, выполнять расчет и выводить результат на экран.
Для начала проверим, не являются ли поля ввода пустыми, так как в противном случае производить расчеты будет не с чем:
Python:
if not weight_fr.get() or int(weight_fr.get()) == 0:
messagebox.showinfo('bmi-pythonguides', f'Вы не ввели вес, или он равен нулю')
return
elif not height_fr.get() or int(height_fr.get()) == 0:
messagebox.showinfo('bmi-pythonguides', f'Вы не ввели рост, или он равен нулю')
return
Также необходимо проверить, не ввел ли пользователь не число, а букву. Сделаем мы это с помощью перехвата исключения ValueError, когда не числовое значение не может быть конвертировано, и выведем соответствующее сообщение.
Затем необходимо считать данные из полей ввода и выполнить расчет. После выполнения расчета проверим с помощью условия if…elif число, которое получилось в результатах расчета, в соответствии с чем выведем сообщение пользователю с нужным сообщением.
Python:
try:
kg = int(weight_fr.get())
mass = int(height_fr.get())/100
imt = kg/(mass*mass)
imt = round(imt, 1)
if imt <= 16:
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас выраженный дефицит массы тела')
elif (imt > 16) and (imt <= 18.5):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас недостаточная масса тела')
elif (imt > 18.5) and (imt <= 25):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас нормальный вес')
elif (imt > 25) and (imt <= 30):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас избыточная масса тела (предожирение)')
elif (imt > 30) and (imt <= 35):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас ожирение первой степени')
elif (imt > 35) and (imt <= 40):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас ожирение первой степени')
elif imt > 40:
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас ожирение третьей степени')
except ValueError:
messagebox.showinfo('bmi-pythonguides', f'Вы ввели не числовое значение!')
Добавим последний штрих для того, чтобы наше приложение могло запуститься. Добавим в конец программы строку, которая запускает цикл событий:
Python:
window.mainloop()
Теперь наша программа полностью готова. Давайте запустим ее и проверим результат. Вот что получилось у меня:
Как видите, в данном контексте использования библиотека Tkinter довольно проста, однако, она позволяет делать и более сложные вещи и оформлять программы оконными интерфейсами.
Ну и теперь полный код программы для расчета индекса массы тела:
Python:
from tkinter import *
from tkinter import messagebox
def calc_imt():
if not weight_fr.get() or int(weight_fr.get()) == 0:
messagebox.showinfo('bmi-pythonguides', f'Вы не ввели вес, или он равен нулю')
return
elif not height_fr.get() or int(height_fr.get()) == 0:
messagebox.showinfo('bmi-pythonguides', f'Вы не ввели рост, или он равен нулю')
return
try:
kg = int(weight_fr.get())
mass = int(height_fr.get())/100
imt = kg/(mass*mass)
imt = round(imt, 1)
if imt <= 16:
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас выраженный дефицит массы тела')
elif (imt > 16) and (imt <= 18.5):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас недостаточная масса тела')
elif (imt > 18.5) and (imt <= 25):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас нормальный вес')
elif (imt > 25) and (imt <= 30):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас избыточная масса тела (предожирение)')
elif (imt > 30) and (imt <= 35):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас ожирение первой степени')
elif (imt > 35) and (imt <= 40):
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас ожирение первой степени')
elif imt > 40:
messagebox.showinfo('bmi-pythonguides', f'Ваш ИМТ {imt}. У вас ожирение третьей степени')
except ValueError:
messagebox.showinfo('bmi-pythonguides', f'Вы ввели не числовое значение!')
window = Tk()
window.title("Индекс массы тела (калькулятор)")
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()
window_width = 400
window_height = 300
x = (screen_width // 2) - (window_width // 2)
y = (screen_height // 2) - (window_height // 2)
window.geometry(f"{window_width}x{window_height}+{x}+{y}")
frame = Frame(window, padx = 10, pady = 10)
frame.pack(expand=True)
height_imt = Label(frame, text="Введите свой рост (в см) ")
height_imt.grid(row=3, column=1)
weight_imt = Label(frame, text="Введите свой вес (в кг) ",)
weight_imt.grid(row=4, column=1)
height_fr = Entry(frame,)
height_fr.grid(row=3, column=2)
weight_fr = Entry(frame,)
weight_fr.grid(row=4, column=2, pady=5)
cal_Button = Button(frame, text='Рассчитать ИМТ', command=calc_imt)
cal_Button.grid(row=5, column=2)
cal_Button.grid(row=5, column=2)
window.mainloop()
Код программы в прикрепленном вложении, а также таблица, по которой делалась интерпретация результата.
Спасибо за внимание! Надеюсь, данная информация будет вам полезна!