Python текст в файл при изменении - PullRequest
0 голосов
/ 19 марта 2020

Я ищу метод для обновления name.txt из текстовой области (с большим количеством текста), НО я не хочу иметь кнопку отправки. Идея заключается в том, что когда в текстовой области происходят изменения, автоматически c сохраняет содержимое.

Надеюсь, что кто-то может подсказать мне направление, в котором я могу искать: -)

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

1 Ответ

0 голосов
/ 19 марта 2020

так, как я могу изменить поле ввода на текстовую область, и при этом все еще иметь textvariable = имя, переданное для обновления name.txt?

Вы не можете. Виджет Text не поддерживает параметр textvariable. Вам это не нужно, хотя вы можете получать данные из виджета так же, как и с textvariable. А именно, вызывая метод get в виджете.

В вашем конкретном случае c вы можете изменить 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...