как сделать чтобы текст из регулируемого списка попадал в entry 'задачи'?

Мне бы хотелось, чтобы весь список переписывало в ячейку 'Задачи' по нажатию кнопки 'Просмотр задач'. Изначально я пыталась это сделать с помощью command=lambda и insert, но это ни к чему не привело. На первом скриншоте я показала как приложение выглядит в принципе, а на втором показала на примере слова 'яблоко', куда оно попадает при неизменном коде. Если это невозможно или трудно реализуемо, то хотя бы,чтобы задачи не появлялись ниже при каждом вызове кнопки 'Просмотр задач', а заменяли имеющимся списком. Помогите пожалуйста с кодом((

визуальное представление приложения то что происходит, а мне бы не хотелось

import tkinter as tk
from tkinter import messagebox

win = tk.Tk()
w = 600
h = 230
icon = tk.PhotoImage(file='img/note.png')
win.iconphoto(False, icon)
win.config(bg='white')
win.title('NoteBoom')
win.geometry(f"{w}x{h}+400+290")
win.resizable(True, True)


tasks = []

def add_task():
    label = tk.Label(win, text='Введите задачу:').grid(row=0, column=1)
    task = taskwin.get()
    tasks.append(task)
    print(tasks)

def viewingTasks():
    if tasks:
        task = taskwin.get()
        for task in tasks:
            tk.Label(win, text=task).grid(column=3, stick='we', padx=10)
    else:
        tk.Label(win, text="Задачи нет").grid(row=0, column=3, padx=10, stick='we')
        
def deleteTask():
    if tasks:
        task = taskwin.get()
        if task in tasks:
            tasks.remove(task)
            tk.Label(win, text="Задача удалена.").grid(row=0, column=4, padx=10, stick='we')
        else:
            tk.Label(win, text="Задача не найдена.").grid(row=0, column=4, padx=10, stick='we')
    else:
        tk.Label(win, text="Никаких задач.").grid(row=0, column=4, padx=10, stick='we')
           
def delete_entry():
    taskwin.delete(0, tk.END)
    
    
tk.Label(win, text="Задачи: ").grid(row=1, column=1, padx=10, stick='we')
Viewing = tk.Entry(win).grid(row=1,column=2)

add_a_task = tk.Button(win, text = 'Добавить задачу', width=20, height=2, command=add_task).grid(row=0, column=0, padx=7, pady=2)
viewing_tasks = tk.Button(win, text = 'Просмотр задач', width=20, height=2, command=viewingTasks).grid(row=1, column=0, padx=4, pady=2)
delete = tk.Button(win, text = 'Удаление задачи', width=20, height=2, command=deleteTask).grid(row=2, column=0, padx=4, pady=2)

tk.Label(win, text='Введите задачу: ').grid(row=0, column=1,stick='we')
taskwin = tk.Entry(win)
taskwin.grid(row=0, column=2)

tk.Button(win, text='Очистить полe', command=delete_entry).grid(row=0, column=3, stick='we')


win.mainloop() ```


Ответы (1 шт):

Автор решения: mrBars1k

Если Вам нужно заполнить поле ввода Задачи (Viewing) данными,
которые хранятся в списке tasks, который заполнен через поле ввода Введите задачу (taskwin) по нажатию кнопки Добавить задачу (add_a_task),
то для решения этой задачи, Вам нужно исправить небольшую часть кода.

Проблема:

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

Viewing = tk.Entry(win).grid(row=1,column=2)

Вместо этого, разделите на две строчки:

Viewing = tk.Entry(win)
Viewing.grid(row=1, column=2)

Теперь получится очистить и затем заполнить поле ввода данными из tasks:

def viewingTasks():
    if tasks:
        Viewing.delete(0, tk.END)
        Viewing.insert(0, tasks)

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

На самом деле, приложение можно переписать более лаконично, масштабируемо и с более точной логикой.

Я рекомендую добавить базу данных, можно sqlite3, это исключит очистку списка после перезапуска программы, а вместо обращения к глобальному списку, который в процессе может быть сложно отслеживать и обрабатывать, будет обращение к базе данных.

Если нужна дополнительная помощь, то пишите, рад буду помочь.

→ Ссылка