#python #tkinter
#python #tkinter
Вопрос:
У меня есть графический интерфейс Python, созданный с помощью Tkinter, который имеет несколько виджетов (поля прокрутки, поля ввода, флажки и т.д.). Для этого проекта, поскольку не вся информация будет завершена за один раз, мне нужен способ сохранить то, что находится в виджетах, а затем иметь возможность снова заполнить его там, где пользователь остановился, открыв сохраненный файл. Поскольку я все еще относительно новичок в Python, я просто пытаюсь понять, что вы все сделали, чтобы добиться этого самым простым способом. Я слышал о сохранении информации в XML, используя модуль shelve, просто сохраняя как txt… Поскольку я не могу использовать SQL для этого, просто ищу способ сделать это. Спасибо
Ответ №1:
В зависимости от того, сколько данных вы хотите сохранить, я бы, в дополнение к xml, рекомендовал бы заглянуть в json или configparser, которые оба поставляются с pyhton и довольно просты.
Я не совсем уверен, входит ли это в сферу вашего вопроса или вы уже решили это, но вы упомянули сохранение и загрузку данных обратно в виджеты. Что касается этого, классы переменных tkinter и метод трассировки довольно полезны. Последний также может использоваться для проверки входных данных (минимальная длина пароля и т.д.)
Комментарии:
1. Спасибо r0w. Я рассмотрю эти варианты. Кто-то также упомянул cPickle, так что, я думаю, это тоже есть. Просто хочу сохранить данные и повторно открыть и заполнить поля ввода / текстовые виджеты и т.д. при повторном открытии приложения. Большое вам спасибо за предложения.
Ответ №2:
Просто продолжайте в том же духе. Я пытался использовать shelve, но в итоге использовал Pickle. Это было довольно просто и дало желаемые результаты. Я могу сохранить ввод от пользователя в полях ввода / переключателях, полях прокрутки и т.д., А затем повторно открыть двоичный файл и «восстановить» ввод в эти виджеты.
import pickle as pk
"""Open File"""
def file_open():
designer_open_file = filedialog.askopenfilename(
initialdir="C:/",
defaultextension=".gd",
filetypes=(("GD", "*.gd"), ("All files", "*"))
)
if designer_open_file is None:
return
saved_gd_data = pk.load(open(designer_open_file, "rb"))
open_designer = saved_gd_data["gd_designer"]
designer_nameE.delete(0, END)
designer_nameE.insert(0, open_designer)
more data collected below...
"""Save Data"""
def file_save():
designer_save_file = filedialog.asksaveasfile(
initialdir="C:/", mode="w",
defaultextension=".db",
filetypes=(("GD", "*.gd"), ("All files", "*"))
)
if designer_save_file is None:
return
gd_save_name = designer_save_file.name
basename = os.path.basename(gd_save_name)
path = os.path.dirname(gd_save_name)
gd_data = {"gsd_designer": designer_nameE.get(), "gd_design": design_nameE.get(),
etc, etc.
pk.dump(gd_data, open(path "/" basename, "wb"))