Запись входных данных в текстовый файл - PullRequest
0 голосов
/ 24 января 2020
from tkinter import *

root = Tk()
writeList = []
myFile = open("details.txt","w")

nameLabel = Label(root,text = "Input your name: ")
nameLabel.grid(column = 1,row = 0)

nameEntry = Entry(root)
nameEntry.grid(column = 2,row = 0)

name = nameEntry.get()
writeList.extend(("Name:",name))

ageLabel = Label(root,text = "Enter your age:")
ageLabel.grid(column = 1,row = 1)

ageEntry = Entry(root)
ageEntry.grid(column = 2,row = 1)

age = ageEntry.get()
writeList.extend(("Age:",age))

def writeFile(writeList):
    for x in range(len(writeList)):
        write = writeList[x]
        myFile.write(write)
        myFile.write("\n")

    myFile.close()

writeButton = Button(root,text = "Write to a file",command = writeFile(writeList),bg = "turquoise")
writeButton.grid(column = 1,row = 3)

root.mainloop()

так что в основном это не будет писать то, что я вводил в записи, в текстовый файл, где я ошибся ...... Мне пришлось попробовать использовать кнопку, чтобы она записывала после ввода, если я напишу записи в функции вместо в for для l oop

1 Ответ

1 голос
/ 24 января 2020

Сначала нужно исправить несколько вещей.

  1. У вас есть get() и extend() в глобальном пространстве имен, а не в функции. Это вызовет 2 метода, вызываемых на __init__, и в основном вы всегда будете иметь и пустое жало. Вы хотите использовать функцию для вызова этих вещей, чтобы получить данные, когда они вам нужны.

  2. Ваша команда кнопки также вызывает вашу функцию на __init__, потому что вы на самом деле не сохранение ссылки на функцию. Чтобы это исправить, вам нужно избавиться от скобок или использовать lambda.

  3. Я бы использовал import tkinter as tk вместо from tkinter import *. Это предотвратит любую случайную перезапись методов.

  4. Я бы использовал with open вместо open() и close(). Оператор with автоматически закроет файл после завершения функции.

Ниже я немного очистил ваш код и добавил необходимые изменения. Дайте мне знать, если у вас есть какие-либо вопросы.

Пример:

import tkinter as tk

root = tk.Tk()
write_list = []

tk.Label(root, text="Input your name: ").grid(column=1, row=0)
tk.Label(root, text="Enter your age:").grid(column=1, row=1)
name_entry = tk.Entry(root)
age_entry = tk.Entry(root)
name_entry.grid(column=2, row=0)
age_entry.grid(column=2, row=1)


def write_file():
    name = name_entry.get()
    age = age_entry.get()
    write_list.extend(("Name:", name))
    write_list.extend(("Age:", age))
    with open("details.txt", "w") as my_file:
        for x in range(len(write_list)):
            write = write_list[x]
            my_file.write(write)
            my_file.write("\n")


tk.Button(root, text="Write to a file", command=write_file, bg="turquoise").grid(column=1, row=3)
root.mainloop()

Результаты:

enter image description here

Файл содержит следующий текст:

Name:
Mike - SMT
Age:
32
...