К примеру есть такая запись:
f=open('D:\Таблицы2.py','r',encoding='utf-8') f.read() f.close()
f=open('D:\Таблицы2.py','r',encoding='utf-8') f.read() f.close()
Konstantin1984+что значит изменился? его переименовали, или переместили в другую директорию? на другой диск? когда это произошло? когда программа не запущена или во время выполнения программы?
Если путь к читаемому (записываемому) файлу изменился
Konstantin1984+так для этого умные люди придумали файлы конфигурации специательные(обычно там простой текст, но особые извращенцы любят их хранить в бинарном виде), где данные храняться в виде ключ=значение, куда “другой пользователь” может вписать путь к своему файлу. А программа при запуске этот файл открывает и считывает из него значение нужного ключа.
Вопрос в том, чтобы в случае передачи другому пользователю (на другой компьютер) программы, в инструкции которой указан адрес конкретного файла (для чтения и записи), программа могла сориентироваться с адресом файла на другом компьютере.
Konstantin1984+опять же сами виджеты вы хранить не сможете, они создаются каждый раз заново при запуске программы, но в тех же файлах конфигурации вы вполне можете хранить все что угодно: размер окна, его местоположения, какие виджеты были в окнах и какие данные были в виджетах.Программа перед закрытием туды записывает все, а при запуске считывает и создает виджеты с задаными параметрами.
А глобально в данном случае мне интересен вопрос сохранения созданных в процессе работы программы виджетов, чтобы при повторном запуске программы они отображались.
import sys from tkinter import * from tkinter.filedialog import * import configparser CONFIG_FILE='config.ini' class Editor(): def __init__(self, master, width=800, height=600, x=0, y=0, last_file=None): self.master = root self.master.title('simple text editor') self.master.geometry('{}x{}+{}+{}'.format(width,height, x, y)) self.text=Text(self.master) self.text.pack(fill=BOTH, expand=1) # ----- главное меню ----- m = Menu(self.master) self.master.config(menu=m) #----- меню "Фалй" ----- file_menu = Menu(m) m.add_cascade(label="File",menu=file_menu) file_menu.add_command(label="Open...",command=self._open) file_menu.add_command(label="Save...",command=self._save) file_menu.add_separator() file_menu.add_command(label="Exit",command=self._exit) self.master.protocol("WM_DELETE_WINDOW", self._exit) self.opened_file = last_file if last_file: with open(last_file, "r") as f: self.text.insert(END,f.read()) self.master.mainloop() def _save(self): t = self.text.get("1.0", END) savelocation=asksaveasfilename() if savelocation: with open(savelocation, "w+") as f: f.write(t) self.opened_file = savelocation def _open(self): openlocation=askopenfilename() if openlocation: self.text.delete("1.0",END) with open(openlocation, "r") as f: self.text.insert(END,f.read()) self.opened_file = openlocation def _exit(self): # при закрытии окна, мы сохраняем параметры окна в конфиг файл print('saving {}'.format(CONFIG_FILE)) parser = configparser.ConfigParser() parser['MAIN']={} parser['MAIN']['width']=str(self.master.winfo_width()) parser['MAIN']['height']=str(self.master.winfo_height()) parser['MAIN']['x']=str(self.master.winfo_x()) parser['MAIN']['y']=str(self.master.winfo_y()) if self.opened_file: parser['MAIN']['last_file']=self.opened_file with open(CONFIG_FILE, 'w') as configfile: parser.write(configfile) self.master.destroy() if __name__ == '__main__': config = dict(width=300, height=200, x=0, y=0, last_file=None) parser = configparser.ConfigParser() # тут мы открывваем файл кнфигурации и читаем из него parser.read(CONFIG_FILE) if 'MAIN' in parser: for key in config: if key in parser['MAIN']: config[key] = parser['MAIN'][key] root=Tk() editor = Editor(root, **config)
[MAIN]
width = 608
height = 487
x = 198
y = 20
last_file =