You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据布尔值在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 07:17:04