Tkinter保存文件并重新打开文件

时间:2020-09-01 22:36:15

标签: python tkinter

我有一个用Tkinter构建的Python GUI,它具有多个小部件(滚动框,输入框,复选框等)。对于此项目,由于并非所有信息都将一次性完成,因此我需要一种方法来保存小部件中的内容,然后能够通过打开保存的文件再次将其填充到用户离开的地方。由于我对Python还是比较陌生,所以我只是想尝试一下大家以最简单的方式完成此操作的方法。我听说过使用shelve模块将信息保存为XML,只是保存为txt ...由于我无法为此使用SQL,因此正在寻找一种实现方法。谢谢

2 个答案:

答案 0 :(得分:0)

根据要保存的数据量,除xml之外,我还建议研究pyhton附带的jsonconfigparser,它们很简单。

我不确定这是否在您的问题范围内,或者您是否已解决此问题,但是您提到了将数据保存并加载回小部件中的问题。对此,tkinter Variable classes and the trace mehthod非常有用。后者也可以用于验证输入数据(最小密码长度等)

答案 1 :(得分:0)

仅此而已。我尝试使用货架,但最终使用了泡菜。它是 非常简单,并产生了我想要的结果。我可以保存来自 用户在输入框/单选按钮,滚动框等中,然后重新打开 二进制文件并将输入“恢复”到这些小部件。

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