如何从Treeview中选择行并删除CSV文件中的相同值?

代码:

import tkinter as tk
from tkinter import *
import tkinter.ttk as ttk
import csv


#Send
def main():
    root = tk.Tk()
    window_width = root.winfo_reqwidth()
    window_height = root.winfo_reqheight()
    print(f'Dimensions: {window_width}x{window_height}')

    # Gets both half the screen width/height and window width/height
    position_right = int(root.winfo_screenwidth()/2 - window_width/2)
    position_down = int(root.winfo_screenheight()/2 - window_height/2)

    # Positions the window in the center of the page.
    root.geometry(f"+{position_right}+{position_down}")
    app = MainWindow(root)
    # root.state('zoomed')
    root.mainloop()

class MainWindow:
    def __init__(self,master):
        self.master = master
        self.master.title('Label requests')
        self.master.geometry('400x400')


#Notebooks
        notebook = ttk.Notebook(self.master)
        notebook.pack(expand = 1,fill = 'both')

#Tabs
        mainWindow = ttk.Frame(notebook)
        dataWindow = ttk.Frame(notebook)
        mainWindow.pack()
        dataWindow.pack()
        notebook.add(mainWindow,text = "Request")
        notebook.add(dataWindow,text = "Progress")

#MainWindow tab --- top window
        topWindow = ttk.Frame(mainWindow)
        topWindow.pack()

#MainWindow tab --- bottom window
        bottomWindow = ttk.Frame(mainWindow)
        bottomWindow.pack(pady = 150)



#widgets - MAIN WINDOW --- TOP WINDOW  --------------------------------------------------------
        self.title_custom = Label(topWindow,text = "Label Order",font = "Helvetica 18 bold")
        self.title_custom.pack()
        self.customer = Label(topWindow,text = 'Customer:')
        self.customer.pack()
        self.customer_entry = Entry(topWindow)
        self.customer_entry.pack()

        self.product = Label(topWindow,text = 'Product:')
        self.product.pack()
        self.product_entry = Entry(topWindow)
        self.product_entry.pack()

        self.weight = Label(topWindow,text = 'Weight:')
        self.weight.pack()
        self.weight_entry = Entry(topWindow)
        self.weight_entry.pack()

        self.in_out = Label(topWindow,text = 'In/Outer:')
        self.in_out.pack()
        self.in_out_entry = Entry(topWindow)
        self.in_out_entry.pack()

        self.quantity = Label(topWindow,text = 'How Many?:')
        self.quantity.pack()
        self.quantity_entry = Entry(topWindow)
        self.quantity_entry.pack()

        self.batch = Label(topWindow,text = 'Batch:')
        self.batch.pack()
        self.batch_entry = Entry(topWindow)
        self.batch_entry.pack()

        self.best_before = Label(topWindow,text = 'Best Before:')
        self.best_before.pack()
        self.best_before_entry = Entry(topWindow)
        self.best_before_entry.pack()

        self.btn = Button(topWindow,text = "Send",command = self.insert_Data_Custom)
        self.btn.pack(pady = 10)

#widgets - MAIN WINDOW --- BOTTOM WINDOW  --------------------------------------------------------

        self.title_order = Label(bottomWindow,text = "Full Order",font = "Helvetica 18 bold")
        self.title_order.pack()
        self.order_number = Label(bottomWindow,text = 'Order Number:')
        self.order_number.pack()
        self.order_number_entry = Entry(bottomWindow)
        self.order_number_entry.pack()

        self.btn = Button(bottomWindow,text = "Request Order Number",command = self.insert_Data_OrderNumber)
        self.btn.pack(pady = 10)


#widgets - DATA WINDOW --------------------------------------------------------

#TREE VIEW - Custom order form
        self.progress_view = ttk.Treeview(dataWindow,columns = ('Customer','Product','Weight','Inner or outer','Quantity','Batch','Best Before','Progress'),show = "headings")
        self.progress_view.heading('#1',text = 'Customer')
        self.progress_view.heading('#2',text = 'Product')
        self.progress_view.heading('#3',text = 'Weight')
        self.progress_view.heading('#4',text = 'Inner Or Outer')
        self.progress_view.heading('#5',text = 'Quantity')
        self.progress_view.heading('#6',text = 'Batch')
        self.progress_view.heading('#7',text = 'Best Before')
        self.progress_view.heading('#8',text = 'Progress')
        self.progress_view.column('#1',anchor = N)
        self.progress_view.column('#2',anchor = N)
        self.progress_view.column('#3',anchor = N)
        self.progress_view.column('#4',anchor = N)
        self.progress_view.column('#5',anchor = N)
        self.progress_view.column('#6',anchor = N)
        self.progress_view.column('#7',anchor = N)
        self.progress_view.column('#8',anchor = N)
        self.progress_view.pack()


#DELETE DATA BUTTON
        self.del_btn = Button(dataWindow,text = "Delete",command = self.delete_Data)
        self.del_btn.pack(pady = 10)

#TREE VIEW - Full Order Request
        self.progress_view_order = ttk.Treeview(dataWindow,columns = ('Order Number',show = "headings")
        self.progress_view_order.heading('#1',text = 'Order Number')
        self.progress_view_order.heading('#2',text = 'Progress')
        self.progress_view_order.column('#1',anchor = N)
        self.progress_view_order.column('#2',anchor = N)
        self.progress_view_order.pack(pady = 30)

#FUNCTIONS --------------------------------------------------------------------

    #DELETE FUNCTION
    def delete_Data(self):
        selected_item = self.progress_view.selection()
        for selected_item in selected_item:
            self.progress_view.delete(selected_item)
            print(selected_item)

    #INSERT DATA FUNCTION
    def insert_Data_Custom(self):
        with open('data.csv','a') as fd:
            fd.write(self.customer_entry.get() + "," +
            self.product_entry.get() + "," +
            self.weight_entry.get() + "," +
            self.in_out_entry.get() + "," +
            self.quantity_entry.get() + "," +
            self.batch_entry.get() + "," +
            self.best_before_entry.get() + '\n')
            fd.close()


        with open('data.csv') as f:
            reader = csv.DictReader(f,delimiter=',')
            for row in reader:
                customer = row['Customer']
                product = row['Product']
                weight = row['Weight']
                inner_outer = row['Inner/Outer']
                quantity = row['Quantity']
                batch = row['Batch']
                bbe = row['Best Before']
                Progress = row['Progress']
                self.progress_view.insert("",values=(customer,product,weight,inner_outer,quantity,batch,bbe,Progress))

        self.customer_entry.delete(0,'end')
        self.product_entry.delete(0,'end')
        self.weight_entry.delete(0,'end')
        self.in_out_entry.delete(0,'end')
        self.quantity_entry.delete(0,'end')
        self.batch_entry.delete(0,'end')
        self.best_before_entry.delete(0,'end')

    def insert_Data_OrderNumber(self):
        self.progress_view_order.insert("",'end',values = (self.order_number_entry.get()))


if __name__ == '__main__':
    main()

问题

我在弄清楚如何通过树视图与CSV文件交互时遇到问题。

目标

我的目标是将数据插入CSV文件中,以更新树状视图。并与之交互,我的意思是:从树视图中选择一行,如果单击“删除”,它将从树视图中删除,但不在CSV文件内部。

问题

如何从树形视图中删除选定的行,同时从CSV文件中删除它?

mirror_cat 回答:如何从Treeview中选择行并删除CSV文件中的相同值?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3110136.html

大家都在问