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