代码:
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文件中删除它?