import tkinter
from tkinter import Tk, Frame, Label, Entry, Button, messagebox
# 2. Функция расчета объема газа
def calculate_volume():
try:
# Считываем данные из полей
m = float(en_m.get()) # масса (г)
M = float(en_M_mol.get()) # молярная масса (г/моль)
P = float(en_P.get()) # давление (Па)
T_celsius = float(en_T.get()) # температура (в Цельсиях)
# Переводим температуру в Кельвины
T_kelvin = T_celsius + 273.15
R = 8.31
# Расчет объема (в м^3)
# Формула: V = (m * R * T) / (M * P)
volume = (m * R * T_kelvin) / (M * P)
res = round(volume, 4)
messagebox.showinfo("Результат", f"Объем газа (V) = {res} м³")
except ValueError:
messagebox.showerror("Ошибка", "Пожалуйста, введите числовые значения")
except ZeroDivisionError:
messagebox.showerror("Ошибка", "Давление или молярная масса не могут быть равны нулю")
# 3. Интерфейс
window = Tk()
window.title("Калькулятор объема газа")
window.geometry("550x400")
window.configure(background="pink")
# 3.2 Оформление виджетов
window.option_add("*Label.font", "Arial 12 normal")
window.option_add("*Label.foreground", "purple")
window.option_add("*Label.background", "white")
window.option_add("*Entry.font", "Arial 12 bold")
window.option_add("*Button.font", "Arial 12 bold")
window.option_add("*Button.background", "pink")
# 3.3 Фрейм
frame = Frame(window, padx=20, pady=20)
frame.pack(expand=True)
frame.configure(background="white")
# 3.4 Надписи и поля ввода
# Масса m
Label(frame, text="Масса газа (г):").grid(row=1, column=1, pady=5, sticky="e")
en_m = Entry(frame)
en_m.grid(row=1, column=2, pady=5)
# Молярная масса M
Label(frame, text="Молярная масса (г/моль):").grid(row=2, column=1, pady=5, sticky="e")
en_M_mol = Entry(frame)
en_M_mol.grid(row=2, column=2, pady=5)
# Давление P
Label(frame, text="Давление газа (Па):").grid(row=3, column=1, pady=5, sticky="e")
en_P = Entry(frame)
en_P.grid(row=3, column=2, pady=5)
# Температура T
Label(frame, text="Температура (°C):").grid(row=4, column=1, pady=5, sticky="e")
en_T = Entry(frame)
en_T.grid(row=4, column=2, pady=5)
# 3.6 Кнопка
btn = Button(frame, text="Рассчитать объем", command=calculate_volume)
btn.grid(row=5, column=1, columnspan=2, pady=20)
window.mainloop()