У меня есть графический интерфейс Python, созданный с помощью Tkinter, в котором есть несколько виджетов (поля прокрутки, поля ввода, флажки и т. Д.). Для этого проекта, поскольку не вся информация будет заполнена за один раз, мне нужен способ сохранить то, что находится в виджетах, а затем иметь возможность снова заполнить его с того места, где пользователь остановился, открыв сохраненный файл. Поскольку я все еще относительно новичок в Python, я просто пытаюсь понять, что вы все сделали, чтобы добиться этого самым простым способом. Я слышал о сохранении информации в XML, используя модуль полки, просто сохраняя как txt ... Поскольку я не могу использовать для этого SQL, просто ищу способ сделать это. Благодарность

0
Evan Becker 2 Сен 2020 в 01:36

2 ответа

Лучший ответ

Просто продолжайте это. Я пробовал использовать полку, но в итоге остановился на рассоле. Это было довольно просто и дало желаемые результаты. Я могу сохранить ввод от пользователя в полях ввода / переключателях, полях прокрутки и т.д., а затем повторно открыть двоичный файл и «восстановить» ввод этих виджетов.

    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"))
0
Evan Becker 13 Сен 2020 в 03:00

В зависимости от того, сколько данных вы хотите сохранить, я бы, помимо xml, рекомендовал заглянуть в json или configparser, которые оба поставляются с pyhton и довольно прямолинейны.

Я не совсем уверен, входит ли это в рамки вашего вопроса или вы уже решили это, но вы упомянули сохранение и загрузку данных обратно в виджеты. В этом отношении очень полезны классы переменных и метод трассировки tkinter. Последний также может использоваться для проверки входных данных (минимальная длина пароля и т. Д.)

0
r0w 2 Сен 2020 в 09:56