PDA

Просмотр полной версии : Оконное приложение с помощью библиотеки Tkinter на Python. Простой пример


Johan Van
06.08.2025, 14:54
В данной заметке не будет хакерских методик или получения информации из различных источников. Здесь я хочу показать, как, хотя бы на базовом уровне использовать библиотеку Tkinter. Зачем она в Python, наверное, понятно, хотя иногда достаточно и командной строки. Вывод информации в графическом виде бывает удобнее для восприятия информации. Тем более, что с помощью данной библиотеки можно так же выводить различные графики и таблицы. Но об этом, как-нибудь в следующий раз. А пока, давайте посмотрим, как можно использовать его на базовом уровне и создадим простейшее приложение, которое будет считать индекс массы тела, который позволяет оценить, есть ли у человека лишний вес. Результаты можно оценить в специальной таблице, но у врачей слишком много градаций для такой простой программы. Поэтому, используем ее упрощенный вариант.

https://forum.antichat.xyz/attachments/4945107/img_119790b8dc.png

Для начала надо понять, как рассчитывается индекс массы тела. Для удобства будем называть его ИМТ. Формула расчета такова:


ИМТ = вес (кг) / рост2 (метры)


Для начала импортируем библиотеку в нашу программу. Делается это с помощью команды:

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
)
and
(
imt

18.5
)
and
(
imt

25
)
and
(
imt

30
)
and
(
imt

35
)
and
(
imt

40
:
messagebox
.
showinfo
(
'bmi-pythonguides'
,
f'Ваш ИМТ{imt}. У вас ожирение третьей степени'
)
except
ValueError
:
messagebox
.
showinfo
(
'bmi-pythonguides'
,
f'Вы ввели не числовое значение!'
)


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

Python:



window
.
mainloop
(
)


Теперь наша программа полностью готова. Давайте запустим ее и проверим результат. Вот что получилось у меня:

https://forum.antichat.xyz/attachments/4945107/img_833c241455.png

Как видите, в данном контексте использования библиотека Tkinter довольно проста, однако, она позволяет делать и более сложные вещи и оформлять программы оконными интерфейсами.

Ну и теперь полный код программы для расчета индекса массы тела:

Код программы в прикрепленном вложении, а также таблица, по которой делалась интерпретация результата.

Спасибо за внимание! Надеюсь, данная информация будет вам полезна!