Форум сайта python.su
0
Добрый день!
Помогите решить две задачи
1)Сохранение созданных виджетов с введенными данными, после выполнения функции add_row
-При запуске программы в первом окне при нажатии кнопки- Параметры, открывается окно для введения параметров необходимых для расчета
-В открывшимся 2ом окне, выбирается количество строк и нажимается кнопка Добавить
-Появляется выбранное количество строк, которые нужно заполнить данными, и нажать кнопку Применить
-Здесь пользователь может закрыть окно, а может и не закрыть
-Далее в первом окне нужно нажать кнопку Расчет
-Появится третье окно с результатами.
Во вложении рисунок 1 и 3 Your text to link here…
Вопрос: как заморозить 2е окно в таком виде с такими данными которые ввел пользователь, если окно было закрыто? И, если пользователь захочет добавить строки, чтобы не происходило автоматическое очищение тех строк которые уже введены, а при выборе меньшего количества строк оставалось нужное количество с введенными данными, остальные строки удалялись.
2)Перезапись результатов
Эта задача связана с предыдущей
-При запуске программы в первом окне при нажатии кнопки- Параметры, открывается окно для введения параметров необходимых для расчета
-В открывшимся 2ом окне, выбирается количество строк и нажимается кнопка Добавить
-Появляется выбранное количество строк, которые нужно заполнить данными, и нажать кнопку Применить
-Здесь пользователь может закрыть окно, а может и не закрыть
-Далее в первом окне нужно нажать кнопку Расчет
-Появится третье окно с результатами.
-На этом этапе если пользователь не закрыл 2е окно где вводятся параметры и 3е окно с расчетами, и решил поменять данные, то после нажатия кнопок применить и расчет, происходит следующее: открывается новое окно с расчетами (4тое) в котором дублируется предыдущий расчет.
Во вложении рисунок 1 и 2 Your text to link here…
Вопрос: как избежать открытия нового окна с расчетами? Как убрать повтор предыдущего расчета?
Код:
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()
Прикреплённый файлы:
15426.jpg (828,0 KБ)
Офлайн
0
Lostns
Добрый день!Помогите решить две задачи1)Сохранение созданных виджетов с введенными данными, после выполнения функции add_row-При запуске программы в первом окне при нажатии кнопки- Параметры, открывается окно для введения параметров необходимых для расчета-В открывшимся 2ом окне, выбирается количество строк и нажимается кнопка Добавить-Появляется выбранное количество строк, которые нужно заполнить данными, и нажать кнопку Применить-Здесь пользователь может закрыть окно, а может и не закрыть-Далее в первом окне нужно нажать кнопку Расчет-Появится третье окно с результатами.Во вложении рисунок 1 и 3 Your text to link here…Вопрос: как заморозить 2е окно в таком виде с такими данными которые ввел пользователь, если окно было закрыто? И, если пользователь захочет добавить строки, чтобы не происходило автоматическое очищение тех строк которые уже введены, а при выборе меньшего количества строк оставалось нужное количество с введенными данными, остальные строки удалялись.2)Перезапись результатовЭта задача связана с предыдущей-При запуске программы в первом окне при нажатии кнопки- Параметры, открывается окно для введения параметров необходимых для расчета-В открывшимся 2ом окне, выбирается количество строк и нажимается кнопка Добавить-Появляется выбранное количество строк, которые нужно заполнить данными, и нажать кнопку Применить-Здесь пользователь может закрыть окно, а может и не закрыть-Далее в первом окне нужно нажать кнопку Расчет-Появится третье окно с результатами.-На этом этапе если пользователь не закрыл 2е окно где вводятся параметры и 3е окно с расчетами, и решил поменять данные, то после нажатия кнопок применить и расчет, происходит следующее: открывается новое окно с расчетами (4тое) в котором дублируется предыдущий расчет.Во вложении рисунок 1 и 2 Your text to link here…Вопрос: как избежать открытия нового окна с расчетами? Как убрать повтор предыдущего расчета?Код:
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()
Офлайн