Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Сохранение созданных виджетов с введенными данными, после выполнения функции add_row, Перезапись результатов [RSS Feed]

#1 Апрель 20, 2022 17:35:13

Lostns
Зарегистрирован: 2022-04-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение созданных виджетов с введенными данными, после выполнения функции add_row, Перезапись результатов

Добрый день!

Помогите решить две задачи

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() 

Прикреплённый файлы:
attachment 15426.jpg (828,0 KБ)

Офлайн

#2 Апрель 20, 2022 17:54:30

Lostns
Зарегистрирован: 2022-04-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение созданных виджетов с введенными данными, после выполнения функции add_row, Перезапись результатов

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() 

Офлайн

  • Начало
  • » Центр помощи
  • » Сохранение созданных виджетов с введенными данными, после выполнения функции add_row, Перезапись результатов[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version