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="В