Сохранение созданных виджетов с введенными данными, после выполнения функции add_row, Перезапись результатов
Помогите решить две задачи
1)Сохранение созданных виджетов с введенными данными, после выполнения функции add_row
- При запуске программы в первом окне при нажатии кнопки- Параметры, открывается окно для введения параметров необходимых для расчета
- В открывшимся 2ом окне, выбирается количество строк и нажимается кнопка Добавить
- Появляется выбранное количество строк, которые нужно заполнить данными, и нажать кнопку Применить
- Здесь пользователь может закрыть окно, а может и не закрыть
- Далее в первом окне нужно нажать кнопку Расчет
- Появится третье окно с результатами.
рисунок 1

рисунок 3

Вопрос: как заморозить 2е окно в таком виде с такими данными которые ввел пользователь, если окно было закрыто? И, если пользователь захочет добавить строки, чтобы не происходило автоматическое очищение тех строк которые уже введены, а при выборе меньшего количества строк оставалось нужное количество с введенными данными, остальные строки удалялись.
2)Перезапись результатов
Эта задача связана с предыдущей
- При запуске программы в первом окне при нажатии кнопки- Параметры, открывается окно для введения параметров необходимых для расчета
- В открывшимся 2ом окне, выбирается количество строк и нажимается кнопка Добавить
- Появляется выбранное количество строк, которые нужно заполнить данными, и нажать кнопку Применить
- Здесь пользователь может закрыть окно, а может и не закрыть
- Далее в первом окне нужно нажать кнопку Расчет
- Появится третье окно с результатами.
- На этом этапе если пользователь не закрыл 2е окно где вводятся параметры и 3е окно с расчетами, и решил поменять данные, то после нажатия кнопок применить и расчет, происходит следующее: открывается новое окно с расчетами (4тое) в котором дублируется предыдущий расчет.
рисунок 1

рисунок 2

Вопрос: как избежать открытия нового окна с расчетами? Как убрать повтор предыдущего расчета?
import math
import tkinter as tk
from tkinter import Frame, Spinbox
from tkinter import ttk
class FW:
M_=[]
P_=[]
W_=[]
PR_=[]
m_ent=[]
p_ent=[]
w_ent=[]
pr_ent=[]
def f_p(self):
self.win_f = tk.Toplevel(win)
self.form_count = Spinbox(self.win_f, from_=1, to=10,)
self.form_count.grid(row=0, column=0) # +++
ttk.Button(self.win_f, text="Добавить", command=self.add_row).grid(row=0, column=1)
ttk.Button(self.win_f, text="Применить", command=self.get_data).grid(row=10, column=1)
def add_row(self):
for i in range (int(self.form_count.get())):
label = ttk.Label(self.win_f, text="{}".format(i+1))
label.grid(row=i+1, column=0)
m = ttk.Entry(self.win_f)
m.grid(row=i+1, column=1)
p = ttk.Entry(self.win_f)
p.grid(row=i+1, column=2)
w = ttk.Entry(self.win_f)
w.grid(row=i+1, column=3)
pr = ttk.Entry(self.win_f)
pr.grid(row=i+1, column=4)
self.m_ent.append(m)
self.p_ent.append(p)
self.w_ent.append(w)
self.pr_ent.append(pr)
def get_data(self):
for a,b,c,d in zip(self.m_ent,self.p_ent,self.w_ent,self.pr_ent):
md=float(a.get())
pd=float(b.get())
wd=float(c.get())
prd=float(d.get())
self.M_.append(md)
self.P_.append(pd)
self.W_.append(wd)
self.PR_.append(prd)
class LP:
def l_p(self):
PZ=[7.0, 6.5, 6.0, 5.5]
ppl = 5
rsk = 12.2
mu1 = 0.578
g =9.80665
plot1 = 792.8
dNKT = 168
t2=480
self.QN_LP_1=[]
for h,m,s,k in zip(FW.M_, FW.P_, FW.W_, FW.PR_):
tm=[]
tmn=1
while tmn<=t2:
tm.append(tmn)
tmn=tmn+10
qn_1=[]
for e in PZ:
qn1=[]
for l in tm:
qnn_1=float((2*math.pi*6.12*10**-2*k*h*(e-(e-ppl)*(l/t2)-ppl))/(mu1*math.log((100*0.7583*l**0.3698)/rsk))-(((math.pi*10**3/(4*g))*dNKT**2)/plot1)*((e-ppl)/t2))
qn1.append(qnn_1)
qn_1.append(qn1)
qn_1=[[i for i in j if i>0] for j in qn_1]
self.QN_LP_1.append(qn_1)
print ('QN',self.QN_LP_1)
def r_w(self):
self.l_p()
win_result = tk.Toplevel(win)
win_result.wm_title('Результаты')
frame1 = Frame(win_result , width=300, height=150)
frame1.grid(row=1, column=0)
table1=ttk.Treeview(frame1)
table1['show']='headings'
table1['columns']=list(range(0,len(self.QN_LP_1)))
for i in range(0,len(self.QN_LP_1)):
table1.column(i, width=100)
table1.heading(i,text="QN {}".format(i+1))
for i in zip(*self.QN_LP_1):
for j in zip(*i):
table1.insert('', 'end', values=j)
table1.grid()
win=tk.Tk()
LP=LP()
ttk.Button(win, text='Расчет',command = LP.r_w).grid(row=17,column=1,stick='we')
FW=FW()
ttk.Button(win, text='Параметры',command = FW.f_p).grid(row=3,column=4, columnspan=3,stick='we')
win.mainloop()```
[1]: https://i.stack.imgur.com/lSaXN.jpg
[2]: https://i.stack.imgur.com/xjYna.png
[3]: https://i.stack.imgur.com/7HJhH.jpg