Загрузка данных


from tkinter import *
from tkinter import ttk
import datetime

# Создаём окно программы
root = Tk()
root.title("Конвертер Единиц")
root.geometry("500x450")
root.resizable(False, False)

# Переменные
число = DoubleVar()        # сюда записывается то, что вводит пользователь
результат = StringVar()    # сюда будет записан ответ
история = []               # список для сохранения прошлых конверсий


# ===================== ОСНОВНАЯ ФУНКЦИЯ =====================
def конвертировать():
    try:
        значение = число.get()                    # берём число из поля
        тип = combo_тип.get()                     # например "Температура"
        из_чего = combo_из.get()
        во_что = combo_в.get()
        
        ответ = значение   # по умолчанию оставляем число как есть

        # === Температура ===
        if тип == "Температура":
            if из_чего == "Цельсий" and во_что == "Фаренгейт":
                ответ = значение * 9/5 + 32
            elif из_чего == "Фаренгейт" and во_что == "Цельсий":
                ответ = (значение - 32) * 5/9
            elif из_чего == "Цельсий" and во_что == "Кельвин":
                ответ = значение + 273.15
            elif из_чего == "Кельвин" and во_что == "Цельсий":
                ответ = значение - 273.15

        # === Длина ===
        elif тип == "Длина":
            if из_чего == "Метры" and во_что == "Километры":
                ответ = значение / 1000
            elif из_чего == "Километры" and во_что == "Метры":
                ответ = значение * 1000
            elif из_чего == "Метры" and во_что == "Сантиметры":
                ответ = значение * 100
            elif из_чего == "Сантиметры" and во_что == "Метры":
                ответ = значение / 100

        # Показываем результат
        результат.set(f"{ответ:.4f} {во_что}")

        # Сохраняем в историю
        время = datetime.datetime.now().strftime("%H:%M")
        история.append(f"[{время}] {значение} {из_чего} → {ответ:.4f} {во_что}")
        
        обновить_историю()

    except:
        результат.set("Ошибка! Введи число")


def обновить_историю():
    listbox.delete(0, END)          # очищаем список
    for запись in история[-7:]:     # показываем последние 7 записей
        listbox.insert(END, запись)


def сменить_тип(*args):
    тип = combo_тип.get()
    
    if тип == "Температура":
        единицы = ["Цельсий", "Фаренгейт", "Кельвин"]
    else:  # Длина
        единицы = ["Метры", "Километры", "Сантиметры"]
    
    combo_из['values'] = единицы
    combo_в['values'] = единицы
    combo_из.current(0)
    combo_в.current(1)


# ===================== ИНТЕРФЕЙС =====================

Label(root, text="Конвертер Единиц", font=("Arial", 16, "bold")).pack(pady=10)

# Выбор типа
Label(root, text="Что конвертируем:").pack(anchor=W, padx=20)
combo_тип = ttk.Combobox(root, values=["Температура", "Длина"], state="readonly")
combo_тип.current(0)
combo_тип.pack(padx=20, fill=X)
combo_тип.bind("<<ComboboxSelected>>", сменить_тип)

# Ввод числа
frame = Frame(root)
frame.pack(pady=10, padx=20, fill=X)
Label(frame, text="Число:").pack(side=LEFT)
Entry(frame, textvariable=число, width=15, font=("Arial", 12)).pack(side=LEFT, padx=10)

# Из чего
Label(root, text="Из:").pack(anchor=W, padx=20)
combo_из = ttk.Combobox(root, state="readonly")
combo_из.pack(padx=20, fill=X)

# Во что
Label(root, text="В