首页 > 解决方案 > 更改时要归档的 Python 文本

问题描述

我正在寻找一种从文本区域(有很多文本)更新 name.txt 的方法,但我不想有提交按钮。想法是当文本区域发生变化时,自动保存内容。

希望也许有人能给我一个我可以搜索的方向:-)

import tkinter as tk

def writefile():
    with open("./name.txt", "r+") as f:
        f.truncate(0)
        f.writelines(name.get())
        print("File has been written !")
        root.update()

root = tk.Tk()

root.geometry('700x600')
root.title("Writers tool")
root.rowconfigure(0, minsize=800, weight=1)
root.columnconfigure(1, minsize=800, weight=1)


frame = tk.Frame(root, bg = "yellow")
frame.place(relwidth = 2, relheight = 1)
frame.pack()

name = tk.StringVar()
name.trace("w", lambda l, idx, mode: writefile())
entry = tk.Text(root, height=10, width=100)
entry.place(relx = 0.25, rely = 50, relwidth=10)


entry.place(relx = 0.25, rely = 0.05, relwidth = 1, relheight = 0.1)
entry.focus_set()
entry.pack()

root.mainloop()

标签: python-3.xtkinter

解决方案


那么如何将输入字段更改为 textarea 并且仍然通过 textvariable = name 来更新 name.txt?

你不能。小Text部件不支持该textvariable选项。不过,您不需要它,您可以从小部件中获取数据,就像使用textvariable. 即,通过调用get小部件上的方法。

在您的特定情况下,您可以修改writefile为如下所示:

def writefile():
    data = entry.get("1.0", "end-1c")
    with open("./name.txt", "r+") as f:
        f.truncate(0)
        f.writelines(data)
        print("File has been written !")
        root.update()

推荐阅读