如何根据布尔值在Tkinter TreeView中显示复选框状态?
需求说明
我有一个.mdb数据库,查询后会返回布尔值。当前在Tkinter的TreeView组件中点击记录时,会根据布尔值显示“Yes”或“No”。希望实现当布尔值为True时复选框处于选中状态,为False时处于未选中状态,以下是我的代码:
from tkinter import * from PIL import ImageTk, Image from tkinter import ttk import pyodbc root = Tk() root.title("cashreceipts") root.geometry("1500x500") def query_database(): conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=\\localserver\(pathway to database).mdb;') c = conn.cursor() cashiers = c.execute("SELECT * from users ORDER BY fullname") records = c.fetchall() my_tag='normal' for record in records: my_tag = 'gray' if my_tag == 'normal' else 'normal' supervisor_value = 'Y' if record[5] else 'N' # Convert True to 'Y' and False to 'N' active_value = 'Yes' if record[2] else 'No' create_value = 'Yes' if record[4] else 'No' void_value = 'Yes' if record[6] else 'No' reconcile_value = 'Yes' if record[7] else 'No' drawer_value = 'Yes' if record[8] else 'No' my_tree.insert(parent='', index='end', iid=record[0], text='', values=(record[0], record[3], record[1], record[9], record[10], record[11], supervisor_value, create_value, void_value, active_value, reconcile_value, drawer_value), tags=(my_tag)) conn.commit() conn.close() style = ttk.Style() style.theme_use('default') style.configure("Treeview", background='lightblue', foreground='black', rowheight=30, fieldbackground='#b568d9') style.map('Treeview', background=[('selected', "#347083")]) tree_frame = Frame(root) tree_frame.pack(pady=10) tree_scroll = Scrollbar(tree_frame) tree_scroll.pack(side=RIGHT, fill=Y) my_tree = ttk.Treeview(tree_frame, yscrollcommand=tree_scroll.set, selectmode="extended") my_tree.pack() tree_scroll.config(command=my_tree.yview) my_tree['columns'] = ("User", "Full Name", "Location", "Drawer 1", "Drawer 2", "Drawer 3", "Supervisor") my_tree.column("#0", width=0, stretch=NO) my_tree.column("User", anchor=W, width=140) my_tree.column("Full Name", anchor=W, width=140) my_tree.column("Location", anchor=W, width=175) my_tree.column("Drawer 1", anchor=W, width=140) my_tree.column("Drawer 2", anchor=W, width=140) my_tree.column("Drawer 3", anchor=W, width=140) my_tree.column("Supervisor", anchor=W, width=140) my_tree.heading("#0", text="", anchor=W) my_tree.heading("User", text="User", anchor=W) my_tree.heading("Full Name", text="Full Name", anchor=W) my_tree.heading("Location", text="Location", anchor=W) my_tree.heading("Drawer 1", text="Drawer 1", anchor=W) my_tree.heading("Drawer 2", text="Drawer 2", anchor=W) my_tree.heading("Drawer 3", text="Drawer 3", anchor=W) my_tree.heading("Supervisor", text="Supervisor", anchor=W) my_tree.tag_configure('blue', background="lightblue") my_tree.tag_configure('normal', background="white") data_frame = LabelFrame(root, text="Demographics/Permission/Drawers", font = 'Helvetica 12 bold', background ='#fadc91') data_frame.pack() active_check = Label(data_frame, text = "Active:", font = 'Helvetica 11 bold', background ='#fadc91') active_check.grid(row=1, column=0, padx=10, pady=10) active_check = Entry(data_frame) active_check.grid(row=1, column=1, padx=10, pady=10) def clear_entries(): active_check.delete(0, END) def select(e): active_check.delete(0, END) selected = my_tree.focus() values = my_tree.item(selected, 'values') active_check.insert(0, values[9]) def update_record(): selected = my_tree.focus() my_tree.item(selected, text="", values=(casr_entry.get(), fn_entry.get(), loc_entry.get(), draw1_entry.get(), draw2_entry.get(), draw3_entry.get(), superv_check.get(), create_check.get(), void_check.get(), active_check.get(), recon_check.get(), drwer_check.get(), )) conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=\\localserver\(pathway to database).mdb;') c = conn.cursor() c.execute("""UPDATE Users SET active = :active, fullname = :fn, location = :loc, create = :create, supervisor = :superv, void_rights = :void, reconcile = :recon, drawers = :drwer, drawer1 = :draw1, drawer2 = :draw2, drawer3 = :draw3 WHERE user = :casr""", { 'active': active_check.get(), 'casr': casr_entry.get(), 'fn': fn_entry.get(), 'loc': loc_entry.get(), 'create': create_check.get(), 'superv': superv_check.get(), 'void': void_check.get(), 'recon': recon_check.get(), 'drwer': drwer_check.get(), 'draw1': draw1_entry.get(), 'draw2': draw2_entry.get(), 'draw3': draw3_entry.get(), }) conn.commit() conn.close() active_check.delete(0, END) edit_frame = LabelFrame(root, text = "Edit Commands", font = 'Helvetica 12 bold', background ='#fadc91') edit_frame.pack() add_button = Button(edit_frame, text = "Add Cashier", font = 'Helvetica 12 bold', background = 'light gray') add_button.grid(row=0, column=0, padx=10, pady=10) updt_button = Button(edit_frame, text = "Update Cashier", font = 'Helvetica 12 bold', background = 'light gray', command = update_record) updt_button.grid(row=0, column=1, padx=10, pady=10) delete_button = Button(edit_frame, text = "Delete Cashier", font = 'Helvetica 12 bold', background = 'light gray', command = update_record) delete_button.grid(row=0, column=2, padx=10, pady=10) clr_button = Button(edit_frame, text = "Clear Boxes", font = 'Helvetica 12 bold', background = 'light gray', command = clear_entries) clr_button.grid(row=0, column=3, padx=10, pady=10) my_tree.bind("<ButtonRelease-1>", select) query_database() def previouspage(): root.destroy() root.deiconify() cxl_button = Button(edit_frame, text = "Previous Page", font = 'Helvetica 12 bold', background ='light gray', command = previouspage) cxl_button.grid(row=0, column=4, padx=10, pady=10) def cx(): root.destroy() cxl_button = Button(edit_frame, text = "Exit", font = 'Helvetica 12 bold', background ='light gray', command = cx) cxl_button.grid(row=0, column=5, padx=10, pady=10) def cx(): root.destroy() cxl_button = Button(root, text = "Exit", font = 'Helvetica 10 bold underline', fg ='#b568d9', background ='#fadc91', command = cx) cxl_button.pack(pady=10) my_labelcx = Label(root, text = " ", font = 'Helvetica 11 bold', background ='#fadc91') my_labelcx.pack() root.mainloop()
内容的提问来源于stack exchange,提问作者marcspector1972
相关产品推荐
相关产品推荐

