如何为tkinter保存文本文件

2024-09-25 02:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写的代码如下:

import tkinter as tk
from tkinter import *




def note1():
    window = tk.Tk()
    window.title("Not")
    window.geometry("300x600+90+0")
    notes = Entry(window,font="Verdana 14 italic")
    notes.pack()
    notesf = tk.Label(text=notes,font = "Verdana 10 italic" )
    notesf.pack




window = tk.Tk()
window.title("Note")
window.geometry("1680x1050+90+0")




monhts = tk.Label(text="OCAK",font = "Verdana 50 italic")
monhts.pack()




day1= tk.Button(text="1 Ocak",font = "Verdana 30 italic",command=note1)
day1.place(x=75,y=250)




window.mainloop()

但是我的问题不是所有的代码,如果你看Def行,一切看起来都很正常,但是我只想保存这个条目,就像你写x person will pay 10 dollars一样,然后关闭程序。当你再次打开它时,它不应该消失。我花了几个小时试图解决这个问题,但我还是没有主意。请帮帮我

这里我们写的是:


Tags: 代码textimporttitletkinterwindowpacktk
1条回答
网友
1楼 · 发布于 2024-09-25 02:36:18

欢迎来到堆栈溢出

为了实现这一点,您需要将内容保存在文本文件中,然后在需要时检索它们。以下是您正在寻找的工作示例:

import tkinter as tk
from tkinter import *

def save(cont, win):
    with open ('save.txt', 'w+') as file:
        file.write(cont.get())
        file.close()
    win.destroy()

def retrieve(cont):
    with open ('save.txt', 'r') as file:
        data = file.read()
        file.close()
    return data
    
def note1():
    window1 = tk.Toplevel()
    window1.title("Not")
    window1.geometry("300x600+90+0")
    content = StringVar()
    notes = Entry(window1, font="Verdana 14 italic", textvariable = content)
    notes.pack()
    try:
        content.set(retrieve(content))
    except:
        pass
    notesf = tk.Label(text=notes,font = "Verdana 10 italic" )
    notesf.pack
    window1.protocol("WM_DELETE_WINDOW", lambda cont = content, win = window1: save(cont, win))

window = tk.Tk()
window.title("Note")
window.geometry("1680x1050+90+0")

monhts = tk.Label(text="OCAK",font = "Verdana 50 italic")
monhts.pack()

day1= tk.Button(text="1 Ocak",font = "Verdana 30 italic",command=note1)
day1.place(x=75,y=250)

window.mainloop()

注:

  1. 我已经将Entry附加到了StringVar(),通过这样做,我可以轻松地使用.get().set()方法分别获取和设置内容
  2. 您在同一个mainloop()中有两个Tk()实例,这是不值得赞赏的,请确保您在一个mainloop()中有一个Tk(),其他的作为Toplevel()
  3. 我在窗口上使用了.protocol("WM_DELETE_WINDOW", ...)方法,因为您希望在关闭窗口时进行保存
  4. 我提到的方法确保Entry即使在保存后关闭父窗口,也会显示以前输入的数据,但是如果您希望在关闭父窗口后不拥有数据,而只在运行时拥有数据,我建议您只使用StringVar,然后设置其先前的值,每次你点击按钮

相关问题 更多 >