Глава 16 · Создаём классные приложения с Tkinter

Мини-проект: конвертер температур

Простая форма — но по образцовой архитектуре: чистая функция преобразования отдельно от интерфейса.

Форма «ввод → проверка → чистая функция → результат» на практике: конвертер температур.

konverter_temperatur.py
def celsius_v_farengejty(celsius):
    return celsius * 9 / 5 + 32

def farengejty_v_celsius(farengejty):
    return (farengejty - 32) * 5 / 9

print(round(celsius_v_farengejty(100), 1))    # 212.0
print(round(celsius_v_farengejty(-40), 1))    # -40.0
print(round(celsius_v_farengejty(0), 1))      # 32.0
Температура не обязана быть положительной
0°C, −5°C, −40°C — всё это совершенно нормальные температуры. Конвертер температур не должен переиспользовать validate_positive_amount (раздел 16.23) — она отвергла бы отрицательный и нулевой ввод как «ошибку». Здесь нужна просто общая проверка «это число?» — parse_number.
konverter_gui.py
import tkinter as tk
from tkinter import ttk

def celsius_v_farengejty(celsius):
    return celsius * 9 / 5 + 32

def parse_number(text):
    text = text.strip()
    if not text:
        return False, None, "Поле не должно быть пустым"
    try:
        return True, float(text), ""
    except ValueError:
        return False, None, "Введите число"

root = tk.Tk()
celsius_var = tk.StringVar()
result_var = tk.StringVar()

def on_convert():
    ok, value, message = parse_number(celsius_var.get())
    if not ok:
        result_var.set(message)
        return
    farengejty = celsius_v_farengejty(value)
    result_var.set(f"{farengejty:.1f} °F")

ttk.Entry(root, textvariable=celsius_var).pack()
ttk.Button(root, text="В Фаренгейты", command=on_convert).pack()
ttk.Label(root, textvariable=result_var).pack()
Конвертер температур: введено -40, результат -40.0 °F
−40°C = −40°F — единственная точка, где шкалы Цельсия и Фаренгейта совпадают. Результат выполнения кода выше. Пример внешнего вида на среде курса. На вашей ОС шрифты, размеры и тема могут немного отличаться.
parse_number уже знаком
Функция parse_number — та же самая, что мы написали в разделе 16.23. Один раз написанная и проверенная функция разбора числа пригождается в нескольких проектах — здесь без дополнительного требования «положительное».
★★ Самостоятельная задача
Оба направления

Добавьте второе поле и кнопку «В Цельсии», использующую farengejty_v_celsius — по образцу существующей кнопки.

Практика: конвертер температур
Проверяется без tkinter — на чистых функциях преобразования, включая отрицательные значения
Открыть практику →