Обновление или изменение определенных данных в Treeview, Python 3.9

#python #tkinter #treeview #edit

Вопрос:

Я создал скрипт, который улавливает вводимые пользователем данные и преобразует их в различные файлы (я знаю, что есть прямой способ использовать только excel, но мне нужна резервная копия этих данных на случай, если что-то случится с версией excel, которую любой может открыть/изменить). Я дошел до того, что при попытке отредактировать столбцы, когда данные передаются в treeview, я не могу указать, что именно нужно изменить, и не могу найти никаких прямых ответов в Интернете. Я довольно новичок в этом, так что любая помощь будет очень признательна, и тем более, если она будет выражена в терминах непрофессионалов.

 def tree_editable():


''' Create a toplevel window that can be edited and used to create an excel file using the Treeview widget'''
import tkinter as tk
from tkinter.constants import  BOTTOM, S, X, Y
from tkinter import ttk,Label, Menu
from tkinter.ttk import Treeview
fd = filedialog
import pandas as pd
import numpy as np

window = Toplevel()
window.geometry('1000x800')
window.title('Client list table')
window.resizable(False, False)
frame1 = Frame(window)
frame1.pack()
my_tree = Treeview(frame1)

def file_open():
    filename = fd.askopenfilename(title= "Open a file", filetypes = [("Excel files", "*.xlsx"), ('CSV Files', '*.csv')])

    if filename:
        try:
            filename = r'{}'.format(filename)
            df = pd.read_excel(filename)
        except ValueError:
            error_label.config(text="File Didn't Work. Try again")
        except FileNotFoundError:
            error_label.config(text="File Not Found.")

    # Clear old tree view
    clear_tree()
    # Set new Treeview

    my_tree["column"] = list(df.columns)
    my_tree ["show"] = 'headings'

    # Loop through the column list for headers
    for column in my_tree["column"]:
        my_tree.heading(column, text=column)

    # Put data in treeview
    df_rows = df.to_numpy().tolist()

    for row in df_rows:
        my_tree.insert('', 'end', values = row)

    def change():
        selected = my_tree.focus()
        print (selected)
        values = my_tree.item(selected, 'values')
        

    def update():
        focused = my_tree.focus()
        x = input('Enter a Value you want to change')
        my_tree.item(focused, values=("", str(x)))
    
    my_tree.bind("<Double-Button>", lambda e: change())
    select = ttk.Button(frame1, text='Edit', command = change()).pack()
    

    update = Button(frame1, text='update', command= update).pack(pady=10)

    my_treeScroll = ttk.Scrollbar(frame1 )
    my_treeScroll.pack(side = RIGHT, fill=Y)
    

    my_treeScroll.configure(command=my_tree.yview)
    my_tree.configure(yscrollcommand=my_treeScroll.set)

    my_treeScroll_x = ttk.Scrollbar(frame1, orient='horizontal' )
    my_treeScroll_x.pack(side=BOTTOM, fill= X)
    

    my_treeScroll_x.configure(command=my_tree.xview)
    my_tree.configure(xscrollcommand=my_treeScroll_x.set)

    my_tree.pack()

def clear_tree():
    my_tree.delete(*my_tree.get_children())

error_label = tk.Label(text='')
error_label.pack
my_menu = Menu(window)
window.config(menu=my_menu)
file_menu = Menu(my_menu, tearoff= False)
my_menu.add_cascade(label="Spreadsheets", menu=file_menu)
file_menu.add_command(label="Open", command=file_open)