Невозможно обновить строку var количества содержимого в текстовом файле. - PullRequest
0 голосов
/ 01 июня 2019

Я сделал довольно простой To-Do менеджер задач или список задач, я поставил ярлык Tkinter в правом нижнем углу, который отображает количество задач в файле данных (.txt, где хранятся задачи) Но яне может заставить его обновиться после изменения номера, добавив задачу или удалив ее.Я пытаюсь заставить работать StringVar, хотя может быть другое решение.Я довольно плохо знаком с Python, надеюсь, мне удалось объяснить самому.

Я пытался преобразовать «с открытым data.txt» в функцию, а затем вызвать ее, чтобы она обновлялась, но это дало мнемножественные ошибки, поскольку я, очевидно, не могу установить StringVar, который находится вне функции, внутри функции, или, по крайней мере, я не смог этого сделать.Я также думал о подсчете элементов в текстовом поле вместо текстового файла, но, к сожалению, я все еще не мог обновить его после первого запуска (после открытия программы).Как я уже говорил, я очень новичок в программировании, поэтому я прошу прощения, если мой код не очень понятен, я старался все упорядочить.Пока я думал, что это правда: решил бы это, но я забыл, что это невозможно в Ткинтере.У меня есть теория, может быть, использование потоков могло бы исправить это, но я не думаю, что это было бы очень эффективным решением.

Мне очень жаль показывать большую часть моего кода, но я не совсем уверен в том, что может бытьактуально или нет

root = Tk()

# List
Lista = []


# Defines



def update_list():
    clear_list()
    for task in Lista:
        Box.insert("end", task)

def clear_list():
    Box.delete(0,"end")

def window(sike):
    sike.title('To Do')
    sike.geometry("450x450+750+200")


def del_task():
    task = Box.get(ACTIVE)
    if task in Lista:
        Lista.remove(task)
    update_list()
    with open ("data.txt", "w") as data:
        data.writelines(Lista)


def add_task():
    task = Entry1.get()
    if task !="":
        with open ("data.txt", "a") as data:
            data.write(task)
            data.write('\n')
        Lista.append(task)
        Entry1.delete(0, "end")
        update_list()

# numbers variable (here's the issue)

with open("data.txt", "r") as data:
    numero = data.readlines()
    numberof = len(numero)

var = StringVar()
var.set(numberof)


# Inside the window
window(root)


Title = Label(root, text='My To-Do List', font = "default 10 bold")
Title.place(x=173, y=20)

Quote = Label(root, text='"You can’t build a reputation based on what you are going to do"', font="default 10 italic")
Quote.place(x=35, y=55)


By = Label(root, text='-Henry Ford', font = "default 10 italic")
By.place(x=180, y=85)

AddTask = ttk.Button(root, text='Add Task')
AddTask.place(x=70, y=150)
AddTask.config(command=add_task)

DeleteTask = ttk.Button(root, text='Delete Task')
DeleteTask.place(x=70, y=300)
DeleteTask.config(command=del_task)

Entry1 = Entry(root, width=35)
Entry1.place(x=200, y=150)

Box = Listbox(root, width=35, height=10)
Box.place(x=200, y=240)


numberoftasks = Label(root, textvariable=var)
numberoftasks.place(x=420, y=420)

# Importing from list save
with open ("data.txt") as data:
    line = data.readlines()
    for thing in line:
        Lista.append(thing)
        update_list()


# Just the loop
root.mainloop()
...