Форум сайта python.su
Расчёт работает только при первой формуле, дальше при нажатии кнопке далее, уже на второй формуле не происходит расчёта и так далее
# Импорт необходимых модулей
import math
import tkinter as tk
from tkinter import messagebox, simpledialog
from PIL import ImageTk, Image
from tkinter.ttk import Style
# Список формул
formulas = [
{
“name”: “Шаг 1: Удельная мощность, рассеиваемая корпусом блока, Вт/м^2”,
“image_path”: “1.png”,
“expression”: “Pb / (2 * (l1 * l3 + l2 * l3 + l1 * l2))”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 2: Коэффициент, учитывающий перфорацию корпуса блока”,
“image_path”: “2.png”,
“expression”: “0.82 * 0.32 ** A”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 3: Перегрев неперфорированного корпуса блока относительно температуры окружающей среды”,
“image_path”: “3.png”,
“expression”: “0.1472 * qk - 0.2962 * 10 ** (-3) * qk ** 2 + 0.3127 * 10 ** (-6) * qk ** 3”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 4: Коэффициент, учитывающий давление окружающей среды”,
“image_path”: “4.png”,
“expression”: “0.82 + (1 / (0.925 + 4.6 * 10 ** (-5) * H1))”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 5: Перегрев корпуса блока относительно температуры окружающей среды в реальных условиях”,
“image_path”: “5.png”,
“expression”: “Ok * Kn1 * Kkp”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 6: Коэффициент заполнения Кз объема блока”,
“image_path”: “6.png”,
“expression”: “0.6”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 7: Удельная мощность, рассеиваемая нагретой зоной блока (Вт/Вт/м^2)”,
“image_path”: “7.png”,
“expression”: “Pb / (2 * (l1 * l2 + (l1 + l2) * l3 * Kz))”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 8: Среднеобъемный перегрев нагретой зоны при неперфорированном корпусе и нормальном давлении внутри корпуса блока”,
“image_path”: “8.png”,
“expression”: “0.139 * qz - 0.1223 * 10 ** (-3) * qz ** 2 + 0.0698 * 10 ** (-6) * qz ** 3”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 9: Коэффициент, учитывающий давление воздуха внутри корпуса блока”,
“image_path”: “9.png”,
“expression”: “0.8 + (1 / (1.25 + 3.8 * 10 ** (-5) * H2))”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 10: Среднеобъемный перегрев нагретой зоны блока”,
“image_path”: “10.png”,
“expression”: “Ok + (Ozo - Oko) * Kn2 * Kkp”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 11: Среднеобъемный перегрев воздуха внутри блока”,
“image_path”: “11.png”,
“expression”: “(Oz + Ok) / 2”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 12: Эквивалентный радиус элемента, установленного на ПП”,
“image_path”: “12.png”,
“expression”: “math.sqrt(Sao / 3.14)”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 13: Параметр m”,
“image_path”: “13.png”,
“expression”: “math.sqrt(2 * (Ak * math.sqrt(H2 * 10 ** (-5)) + Al) / (Ap * Bp))”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 14: Коэффициент, учитывающий теплоотдачу с корпуса элемента”,
“image_path”: “14.png”,
“expression”: “23.54 / (4.317 + math.log10(S))”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаги 15-16: Перегрев корпуса элемента относительно температуры воздуха внутри блока”,
“image_path”: “16.png”,
“expression”: “Pa / (((Ka - Al) * math.sqrt(H2 * 10 ** -5) + Al) * (S - Sao) + (Bz / (Az * Sao) + (B + M * 3.14 * R * Ap * Bp * m * Ao) ** -1) ** -1)”,
“variables”: ,
“calculated”: False
},
{
“name”: “Шаг 17: Температура корпуса элемента”,
“image_path”: “17.png”,
“expression”: “Oa + Ovb + tc”,
“variables”: ,
“calculated”: False
},
]
# Класс приложения
class FormulaApp(tk.Tk):
def __init__(self):
super().__init__()
self.title(“Многостраничное приложение”)
self.geometry(“800x500”)
self.state(“zoomed”)
style = Style()
style.configure(“TLabel”, background=“white”, font“Times New Roman”, 14))
self.background_image = ImageTk.PhotoImage(Image.open(“background.jpg”))
self.background_label = tk.Label(self, image=self.background_image)
self.background_label.place(x=0, y=0, relwidth=1, relheight=1)
self.current_page = 0
self.start_page()
def start_page(self):
self.title_label = tk.Label(self, text=“Название программы”, font“Times New Roman”, 24, “bold”), bg=“white”)
self.title_label.pack(pady=50)
self.info_button = tk.Button(self, text=“Информация”, command=self.show_info, font“Times New Roman”, 16, “bold”))
self.info_button.pack(pady=10)
self.start_button = tk.Button(self, text=“Начать”, command=self.next_page , font“Times New Roman”, 16, “bold”))
self.start_button.pack(pady=10)
def next_page(self):
self.clear_widgets()
self.background_image = ImageTk.PhotoImage(Image.open(“background.jpg”))
self.background_label = tk.Label(self, image=self.background_image)
self.background_label.place(x=0, y=0, relwidth=1, relheight=1)
self.formula_label = tk.Label(self, text=formulas, wraplength=600, bg=“white”)
self.formula_label.pack(pady=20)
self.result_label = tk.Label(self, text=“”, wraplength=600, bg=“white”)
self.result_label.pack(pady=20)
self.variables = {}
self.variables_frame = tk.Frame(self, bg=“white”)
self.variables_frame.pack(pady=10)
for variable in formulas:
self.create_variable_input(variable)
self.calculate_button = tk.Button(self, text=“Рассчитать”, command=self.calculate_formula, font“Times New Roman”, 16, “bold”))
self.calculate_button.pack(pady=10)
self.prev_button = tk.Button(self, text=“Назад”, command=self.prev_page, font“Times New Roman”, 16, “bold”))
self.prev_button.pack(side=tk.LEFT, padx=10, pady=10)
self.data_button = tk.Button(self, text=“Данные”, command=self.show_data, font“Times New Roman”, 16, “bold”))
self.data_button.pack(side=tk.LEFT, padx=10, pady=10)
self.clear_button = tk.Button(self, text=“Сбросить”, command=self.reset_variables, font“Times New Roman”, 16, “bold”))
self.clear_button.pack(side=tk.LEFT, padx=10, pady=10)
self.next_button = tk.Button(self, text=“Далее”, command=self.next_formula, font“Times New Roman”, 16, “bold”))
self.next_button.pack(side=tk.RIGHT, padx=10, pady=10)
self.update_formula()
def clear_widgets(self):
for widget in self.winfo_children():
widget.destroy()
def create_variable_input(self, variable):
variable_label = tk.Label(self.variables_frame, text=f“{variable}: ”, font“Times New Roman”, 14), bg=“white”)
variable_label.grid(sticky=“W”)
variable_entry = tk.Entry(self.variables_frame, font“Times New Roman”, 14))
variable_entry.grid(row=len(self.variables), column=1, padx=5, pady=5)
variable_entry.insert(tk.END, “”)
self.variables = variable_entry
def update_formula(self):
formula = formulas
image = Image.open(formula)
image = image.resize((700, 200), Image.ANTIALIAS)
photo = ImageTk.PhotoImage(image)
self.formula_label.configure(text=formula, image=photo, compound=tk.TOP)
self.formula_label.image = photo
self.result_label.configure(text=“”)
# Обновление названий переменных
for child in self.variables_frame.winfo_children():
child.destroy()
for i, variable in enumerate(formula):
variable_label = tk.Label(self.variables_frame, text=f“{variable}: ”, font“Times New Roman”, 14), bg=“white”)
variable_label.grid(sticky=“W”)
variable_entry = tk.Entry(self.variables_frame, font“Times New Roman”, 14))
variable_entry.grid(row=i, column=1, padx=5, pady=5)
variable_entry.insert(tk.END, “”)
self.variables = variable_entry
def calculate_formula(self):
formula = formulas
if “calculated” in formula and formula:
return
expression = formula
for variable, entry in self.variables.items():
value = entry.get()
expression = expression.replace(variable, str(value))
try:
result = eval(expression)
self.result_label.configure(text=f“Результат: {result}”)
formula = True
except Exception as e:
self.result_label.configure(text=f“Ошибка при вычислении: {str(e)}”)
formula = False
def reset_variables(self):
for entry in self.variables.values():
entry.delete(0, tk.END)
def next_formula(self):
if self.current_page < len(formulas) - 1:
self.current_page += 1
self.update_formula()
def prev_page(self):
if self.current_page > 0:
self.current_page -= 1
self.update_formula()
def show_info(self):
formula = formulas
messagebox.showinfo(“Информация”, formula)
def show_data(self):
formula = formulas
image_path = formula
image = Image.open(image_path)
image.show()
if __name__ == “__main__”:
app = FormulaApp()
app.mainloop()
Офлайн
Ошибка:
Exception in Tkinter callback
Traceback (most recent call last):
File “C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py”, line 1921, in __call__
return self.func(*args)
File “C:\pythonProject\teplo\teplo.py”, line 234, in calculate_formula
value = entry.get()
File “C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py”, line 3072, in get
return self.tk.call(self._w, ‘get’)
_tkinter.TclError: invalid command name “.!frame.!entry5”
Офлайн
Передай код через теги code.
[code python]
тут пиши код
[/code]
Офлайн