[英]Cannot Add Items To Treeview In Tkinter Python
class PartsDetials(tk.LabelFrame):
def __init__(self, parent, bg="#ff704d", fg="black", bd=6, relief=GROOVE, font="Poppins 20 bold", *args, **kwargs):
super().__init__(parent, bg=bg, fg=fg, bd=bd, relief=relief, font=font, *args, **kwargs)
# Variables
self.part_name = StringVar()
self.part_cost = StringVar()
self.part_qty = StringVar()
self.part_labour = StringVar()
self.part_amount = StringVar()
self.part_cost.set("0")
self.part_qty.set("1")
self.part_labour.set("0")
btn_font = tkFont.Font(family="Noto Sans", size=15, weight="bold")
entry_font = tkFont.Font(family="Noto Sans", size=15, weight="bold")
entry_label_font1 = tkFont.Font(family="Roboto", size=17, weight="bold")
entry_label_font2 = tkFont.Font(family="Roboto", size=15, weight="bold")
bg_color1 = "#ff704d"
# Widgets and Frames
btn_frame = Frame(self, bd=0, bg=bg_color1)
btn_frame.grid(row=0, column=1)
self.add_part_txt = tk.Entry(self, textvariable=self.part_name, width=30, font=entry_font, bd=8, relief=SUNKEN)
self.add_part_txt.grid(row=0, column=0, pady=4, padx=10)
add_part_btn = tk.Button(btn_frame, text="Add Part", font=btn_font, bd=8, width=18, command=self.add_part)
add_part_btn.grid(row=0, column=1)
self.part_filter_list = Listbox(self, font="Cosmicsan 15 bold", width=30, height=10, bd=8, relief=GROOVE)
self.part_filter_list.grid(row=1, column=0, padx=10)
self.part_filter_list.bind("<<ListboxSelect>>", self.show_selected_part)
self.add_part_txt.bind("<KeyRelease>", self.sort_parts)
selected_part_details = LabelFrame(self, text="Part Details", bg=bg_color1, fg="white", font="Poppins 17 bold", bd=6, relief=GROOVE)
selected_part_details.grid(row=1, column=1)
part_cost_lbl = tk.Label(selected_part_details, text="Part Unit Cost", bg=bg_color1, fg="yellow", font=entry_label_font2)
part_qty_lbl = tk.Label(selected_part_details, text="Part Quantity", bg=bg_color1, fg="yellow", font=entry_label_font2)
part_labour_lbl = tk.Label(selected_part_details, text="Part Labour", bg=bg_color1, fg="yellow", font=entry_label_font2)
part_cost_lbl.grid(row=0, column=1, padx=12, pady=5, sticky="W")
part_qty_lbl.grid(row=1, column=1, padx=12, pady=5, sticky="W")
part_labour_lbl.grid(row=2, column=1, padx=12, pady=5, sticky="W")
part_cost_txt = tk.Entry(selected_part_details, textvariable=self.part_cost, width=10, font=entry_font, bd=8, relief=SUNKEN)
part_qty_txt = tk.Entry(selected_part_details, textvariable=self.part_qty, width=10, font=entry_font, bd=8, relief=SUNKEN)
part_labour_txt = tk.Entry(selected_part_details, textvariable=self.part_labour, width=10, font=entry_font, bd=8, relief=SUNKEN)
part_cost_txt.grid(row=0, column=2)
part_qty_txt.grid(row=1, column=2)
part_labour_txt.grid(row=2, column=2)
amount_btn = tk.Button(selected_part_details, bd=10, relief=RAISED, text="Total Amount", bg="#260d0d", fg="white", font=entry_label_font1, command=self.total_part_cost)
amount_txt = tk.Entry(selected_part_details, textvariable=self.part_amount, width=10, bg="#260d0d", fg="white", font=entry_font, bd=10, relief=SUNKEN)
amount_btn.grid(row=4, column=1, pady=5)
amount_txt.grid(row=4, column=2)
def add_part(self):
bill_window = BillWindow(None)
parts_table = bill_window.parts_table
part_name = self.part_name.get()
part_cost = self.part_cost.get()
part_qty = self.part_qty.get()
part_labour = self.part_labour.get()
part_amount = self.part_amount.get()
if part_name != "" and int(part_cost) > 0 and int(part_qty) > 0 and int(part_labour) >= 0 and int(part_amount) > 0:
# Adding parts in parts list and in parts table
global count
added_parts_list.append([count, part_name, int(part_cost), int(part_qty), int(part_labour), int(part_amount)])
added_parts_table_list.append([count, part_name, f'Rs. {part_cost}', int(part_qty), f'Rs. {part_labour}', f'Rs. {part_amount}'])
bill_window.parts_table.insert(parent='', index='end', iid=count, text=count, values=(part_name, f'Rs. {part_cost}', part_qty, f'Rs. {part_labour}', f'Rs. {part_amount}'))
count+=1
class BillWindow(tk.LabelFrame):
def __init__(self, parent, bg="#ff704d", fg="black", bd=6, relief=GROOVE, font="Poppins 20 bold", *args, **kwargs):
super().__init__(parent, bg=bg, fg=fg, bd=bd, relief=relief, font=font, *args, **kwargs)
# Parts Table
parts_table_frame = tk.Frame(self, bd=5, relief=SUNKEN)
parts_table_frame.grid(row=1, column=1, sticky="ne")
scroll_y = tk.Scrollbar(parts_table_frame, orient="vertical")
self.parts_table = ttk.Treeview(parts_table_frame, yscrollcommand=scroll_y.set)
table_style = ttk.Style()
table_style.configure("Treeview",
background = "silver",
foreground = "black",
rowheight=28,
)
table_style.map('Treeview', background=[('selected', f'{bg_color1}')], foreground=[('selected', 'white')])
self.parts_table['columns'] = ("Description", "Unit Cost", "Quantity", "Labour", "Amount")
self.parts_table.column("#0", width=38, minwidth=38)
self.parts_table.column("Description", width=200, minwidth=200)
self.parts_table.column("Unit Cost", width=70, minwidth=70)
self.parts_table.column("Quantity", width=54, minwidth=54)
self.parts_table.column("Labour", width=60, minwidth=60)
self.parts_table.column("Amount", width=70, minwidth=70)
self.parts_table.heading("#0", text="Sr.No")
self.parts_table.heading("Description", text="Description")
self.parts_table.heading("Unit Cost", text="Unit Cost")
self.parts_table.heading("Quantity", text="Quantity")
self.parts_table.heading("Labour", text="Labour")
self.parts_table.heading("Amount", text="Amount")
scroll_y.pack(side=RIGHT, fill=Y)
scroll_y.config(command=self.parts_table.yview)
self.parts_table.pack(side=TOP, fill="both")
self.grid_columnconfigure((0,1,2,3), weight=1)
root = tk.Tk()
parts_details = PartsDetials(root, text="Part Detials")
parts_details.pack(fill="both", side="left", anchor="nw", expand=False)
bill_window = BillWindow(root, text="Bill Window")
bill_window.pack(fill="both")
root.mainloop()
每当执行add_part()
() 时,您就创建了BillWindow()
的新实例,然后将记录添加到其中的 treeview。 这个实例是不可见的,因为它没有.pack()
或.grid()
。
删除add_part()
中的以下两行:
def add_part(self):
# should not create new instance of BillWindow() here
# use the one created in main block
#bill_window = BillWindow(None)
#parts_table = bill_window.parts_table
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.