Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 30

Сохранение введеных данных в форме, после закрытия окна

05.07.2022, 12:45. Показов 2236. Ответов 6

Студворк — интернет-сервис помощи студентам
Добрый день!
Помогите пожалуйста с кодом!
Необходимо что бы при повторном открытии сохранялись добавленные поля, и ранее введенные в них данные, количество полей динамическое, их количество определяется пользователем. Большое спасибо!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import tkinter as tk
from tkinter import ttk
 
 
win = tk.Tk()
win.geometry('500x300')
win.title('Расчет')
 
class Form_window:
    name_entry=[]
    fam_entry=[]
    def form_parameters_win(self):
 
            self.win_form = tk.Toplevel(win)
            self.win_form.wm_title('Форма')
 
            tk.Label(self.win_form, text='Имя',width=15).grid(row=2, column=0)
            tk.Label(self.win_form, text='Фамилия',width=15).grid(row=2, column=1)
            self.frame_button=tk.Frame(self.win_form)
            self.frame_button.grid(row=0, column=0,stick='nw',pady=0, padx=7,columnspan=3)
            self.add_button=ttk.Button(self.frame_button, text="Добавить", command=self.add_row).grid(row=0, column=0,pady=10)
            self.ok_button=ttk.Button(self.frame_button, text="Применить", command=self.get_data).grid(row=0, column=1,pady=10)
            self.add_row()
 
 
    def add_row(self):
            self.name_entry.append(ttk.Entry(self.win_form,width=5))
            self.fam_entry.append(ttk.Entry(self.win_form,width=5))
            self.name_entry[-1].grid(column=0, row=len(self.name_entry)+2,padx=0,pady=0,stick="nsew")
            self.fam_entry[-1].grid(column=1, row=len(self.fam_entry)+2,padx=0,pady=0,stick="nsew")
 
 
    def get_data(self):
        global name_data, fam_data
        self.name_data = []
        self.fam_data = []
 
        for i in range(len(self.name_entry)):
            self.name_data.append(self.name_entry[i].get())
            self.fam_data.append(self.fam_entry[i].get())
 
        print (self.name_data, self.fam_data,)
 
 
FW = Form_window()
but=ttk.Button(win, text='Данные', command = FW.form_parameters_win)
but.grid()
win.mainloop()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.07.2022, 12:45
Ответы с готовыми решениями:

Сохранение данных после закрытия окна
]У меня есть программа в которой есть график, слайдер, кнопка и спинбоксы... суть программы такова: когда начинаю двигать слайдер вправо -...

Сохранение изображений на форме после её закрытия
Приветствую, мучаюсь над системой управления светом в моём маленьком студенческом проекте, загвоздка вот в чём, когда я меняю картинку(свет...

Сохранение изменений в таблице после закрытия окна
Мучаю машину уже неделю, а до ума все не доведу... Sql код в запросе работает, но при закрытии формы появляется значок ошибки напротив...

6
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
05.07.2022, 15:12
Lostns, создать файл при завершении программы, сохранить настройки, при открытие брать оттуда всю информацию, пожалуйста.
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 30
05.07.2022, 16:17  [ТС]
Здравствуйте! Возможно не совсем корректно задала вопрос, само окно "расчет" не закрывается, закрывается и открывается только окно "форма". Все что вводится в этом окне формируется в списки. Как потом данные из этих списков поместить обратно при открытии окна "форма", не закрывая программу?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
06.07.2022, 07:43
Lostns, привязать функцию к событию закрытия окна.

Python
1
form.protocol("WM_DELETE_WINDOW", form_close)
0
 Аватар для Semen-Semenich
5234 / 3479 / 1175
Регистрация: 21.03.2016
Сообщений: 8,306
06.07.2022, 17:34
первое что не совсем понятно для чего глобальные переменные ?
Python
1
2
3
4
    def get_data(self):
        global name_data, fam_data
        self.name_data = []
        self.fam_data = []
ну по вопросу попробую объяснить суть. вы создаете два поля Entry с координатами размещения. попробуй те создать объект рамка Frame в котором размещены два поля ввода. функция добавления должна создавать экземпляр рамки с полями и добавлять на окно. при сохранении текст сохраняется в объекте. вообщем сложно в двух словах объяснить. попробуйте понять по коду и форматирование виджетов подгоните. у меня готовый был я скопировал чуть подправив под условия

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from tkinter import*
 
class Infolabel(Frame):
 
     
    def __init__(self, parent, text =''):
        Frame.__init__(self, parent, bg='light green') 
        self.entry_left = Entry(self,  font="Arial 14", width = '25',bd =4)
        self.entry_left.pack(side = LEFT,expand = 1, pady="5", fill = X)
        self.entry_right = Entry(self,  font="Arial 14", width = '25',bd =4)
        self.entry_right.pack(side = LEFT,expand = 1, pady="5", fill = X)
        if text :
            self.entry_left.insert(0, text[0])
            self.entry_right.insert(0, text[1])
            
    def save_info(self):
        self.info = [en.get() for en in (self.entry_left, self.entry_right)]
        
    def get_info(self):
        return self.info
        
 
class Form_window:
    name_entry= []
    fam_entry=[]
    
    def form_parameters_win(self):
            self.win_form = Toplevel(win)
            self.win_form.wm_title('Форма')
            Label(self.win_form, text='Имя',width=15).grid(row=2, column=0)
            Label(self.win_form, text='Фамилия',width=15).grid(row=2, column=1)
            self.frame_button=Frame(self.win_form)
            self.frame_button.grid(row=0, column=0,stick='nw',pady=0, padx=7,columnspan=3)
            self.add_button=Button(self.frame_button, text="Добавить", command=self.add_row).grid(row=0, column=0,pady=10)
            self.ok_button=Button(self.frame_button, text="Применить", command=self.get_data).grid(row=0, column=1,pady=10)
            for obj in __class__.name_entry:
                   self.add_row(obj.get_info())
            self.add_row()
 
    def add_row(self, data = None):
        line = Infolabel(self.win_form, data)
        line.grid()
        if not data:
            __class__.name_entry.append(line)
 
    def get_data(self):
        self.name_data = []
        self.fam_data = []
        for obj in __class__.name_entry:
            obj.save_info()
            left, right = obj.get_info()
            self.name_data.append(left)
            self.fam_data.append(right)
 
        print (self.name_data, self.fam_data,)
 
win = Tk()
win.geometry('500x300')
win.title('Расчет') 
FW = Form_window()
but=Button(win, text='Данные', command = FW.form_parameters_win)
but.grid()
win.mainloop()
1
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 30
07.07.2022, 09:57  [ТС]
Здравствуйте! Спасибо большое за ответ! Попробуем разобраться!

По поводу глобальных переменных- это только маленькая часть того кода, в котором прописано это окно. На форуме уже задавала вопрос, тоже пыталась сократить программу до основной сути, но видимо очень не понятно описала проблемы, мне так никто и не ответил - www.cyberforum.ru/python-tasks/thread2973166.html
На данный момент не решена только первая задача- отображения уже введенных данных в окне с возможностью перезаписи... Сразу отвечу на вопрос зачем вообще окно, из-за динамичности вводимых параметров, их может быть 1-10-20, сколько требуется, и я не знаю как добавить на основное окно программы возможность скрола в определенной области, если это не таблица, а форма для заполнения.
Во вложении интерфейс текущий, для наглядности...
Миниатюры
Сохранение введеных данных в форме, после закрытия окна  
0
07.07.2022, 13:16

Не по теме:


Как же больно видеть, что программы где больше трех кнопок пишутся на tk...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2022, 13:16
Помогаю со студенческими работами здесь

Сохранение изменений в таблице после закрытия окна
Проект прилагается - все никак не победю:-using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; ...

Сохранение состояние элементов управления после открытия/закрытия окна
После перехода в настройки открывается окно идет подключение к COM порту, но состояние кнопки не сохраняется. Как это правильно...

Сохранение данных приложения после закрытия
Здравствуйте. Мне нужно чтобы после закрытия приложения у меня сохранялись данные в QListWidget. У меня есть QListWidget в который я...

Сохранение данных после закрытия программы
Например есть переменная а и в процессе работы программы ей присваивается определенное значение. Как сделать так чтоб оно сохранялось после...

Сохранение данных приложения после закрытия
в python 3.6 Здравствуйте. Мне нужно чтобы после закрытия приложения у меня сохранялись данные в QListWidget. У меня есть QListWidget в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru