图书馆管理系统如何获取Treeview选中行并添加到另一窗口Treeview
图书馆管理系统借阅结算功能实现
实现从主界面Treeview图书列表中选中指定条目,点击「ADD TO CART」按钮后,将选中行数据同步到结算页Treeview的功能。
主界面Treeview效果:
结算页效果:
原有代码问题修复
首先修正原有代码中滚动条绑定的错误:原有代码command=tree.yview()多写了括号,会导致程序启动时直接触发滚动条回调,绑定失效,需要去掉括号改为command=tree.yview。
核心实现步骤
- 调整Treeview变量作用域,确保按钮回调函数可以访问到主界面和结算页的Treeview实例
- 实现
add_to_cart_f回调函数,获取选中行数据 - 将选中行数据插入到结算页Treeview中
完整修改参考代码
from tkinter import Tk, Button, Toplevel, ttk import pandas as pd # 提前定义全局变量存储Treeview实例 main_tree = None checkout_tree = None # 颜色常量定义 WHITE = "#FFFFFF" NAVY_BLUE = "#000080" def reserve(): # 原有reserve逻辑保持不变 pass def search(): # 原有search逻辑保持不变 pass def checkout_page(): global checkout_tree # 创建结算页顶层窗口 checkout_win = Toplevel() checkout_win.title("借阅结算") # 初始化结算页Treeview,列配置和主界面保持一致 checkout_tree = ttk.Treeview(checkout_win) books_columns = list(pd.read_csv("List of Books - Sheet1 (3).csv").columns) checkout_tree["column"] = books_columns checkout_tree["show"] = "headings" for col in books_columns: checkout_tree.heading(col, text=col) checkout_tree.pack(fill="both", expand=True, padx=10, pady=10) def add_to_cart_f(): # 获取所有选中的行id selected = main_tree.selection() if not selected: # 未选中任何行直接返回 return for item in selected: # 获取选中行的所有值 row_values = main_tree.item(item, "values") # 插入到结算页Treeview checkout_tree.insert("", "end", values=row_values) # 主界面初始化 root = Tk() root.title("图书馆管理系统") # 原有按钮逻辑保持不变 reserve_button = Button(root, text="RESERVE" ,fg=WHITE, bg=NAVY_BLUE, width=20, command=reserve) reserve_button.grid(column=5,row=5) checkout_button = Button(root, text="CHECKOUT", fg=WHITE,bg="#6DA5A9",width=20,command=checkout_page) checkout_button.grid(column=0,row=5,sticky="w") search_button = Button(root, text="SEARCH", fg=WHITE,bg="pink", width=20, command=search) search_button.grid(column=3,row=3) add_to_cart = Button(root, text="ADD TO CART", fg=WHITE,bg="#7E370C", width=20,command=add_to_cart_f) add_to_cart.grid(column=7, row=5,sticky="e") # 主界面Treeview创建 main_tree = ttk.Treeview(root) books_data = pd.read_csv("List of Books - Sheet1 (3).csv") df_column = list(books_data.columns) main_tree["column"] = df_column main_tree["show"] = "headings" # 修正滚动条绑定 vsb = ttk.Scrollbar(root, orient="vertical", command=main_tree.yview) vsb.grid(column=8, row=4, sticky="ns") main_tree.configure(yscrollcommand=vsb.set) for column in df_column: main_tree.heading(column,text=column) df_rows = books_data.to_numpy().tolist() for row in df_rows: main_tree.insert("","end",values=row) main_tree.grid(column=0,row=4,columnspan=8) root.mainloop()
内容的提问来源于stack exchange,提问作者Noahwaaa
相关产品推荐
相关产品推荐

