[Python] how to use the same entry box in tkinter to add a record or to query data in a...

Discussão em 'Python' iniciado por Stack, Julho 30, 2025.

  1. Stack

    Stack Membro Participativo

    I want to use the first_name entry box to add a record or query the treeview in this code using the fuction "execute_search". my idea was to add a new label and entry box overlaping the original entry box and activate it when push the execute search button. in summary two functions controlled in one button.

    Thanks.

    from tkinter import *
    from tkinter import ttk

    from tkinter import messagebox
    import sqlite3

    from Lib.test.test_email.test_message import first

    #Data to fill up Treeview

    Data = [
    ["Maria", "Elder", 1, "1111 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["Johny", "Elder", 2, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["Joe", "Elder", 3, "5554 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["marty", "Elder", 4, "8876 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["don", "Elder", 5, "9876 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["mike", "Elder", 6, "1234 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["Paula", "Elder", 7, "4564 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["Vianney", "Elder", 8, "6587 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["Mariana", "Elder", 9, "3489 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["Ignacio", "Elder", 10, "9876 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["Paola", "Gruber", 9, "1630 ", "Pembroke Pines", "Florida", "33308"],
    ["Frankestein", "Gruber", 9, "3249", "Pembroke Pines", "Florida", "33308"],
    ["Paola", "Torres", 47, "1630 ", "Pembroke Pines", "Florida", "33308"],
    ["John", "Elder", 14, "7709 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["John", "Elder", 15, "6890 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["John", "Elder", 16, "1895 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["John", "Elder", 17, "0521 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["John", "Elder", 18, "5467 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["John", "Elder", 19, "9900 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
    ["John11111", "Elder", 20, "6612 NE 36Th", "Fort Lauderdale", "Florida", "33308"]
    ]


    root = Tk()

    root.title('Users List')
    #root.iconbitmap()
    root.geometry("1000x500")



    #Create a Database or use an existing
    conn = sqlite3.connect('userregistration.db')


    #Create cursor
    c = conn.cursor()

    #Create a table
    c.execute("""CREATE TABLE if not exists user_data (
    firstname text,
    lastname text,
    id integer,
    address text,
    city text,
    state text,
    zipcode text)
    """)

    #Commit changes
    conn.commit()

    #Close Database
    #conn.close()



    #Add dummi data to a table
    '''
    for record in Data:
    c.execute("INSERT INTO user_data VALUES :)firstname, :lastname, :id, :address, :city, :state, :zipcode)",
    {
    'firstname': record[0],
    'lastname': record[1],
    'id': record[2],
    'address': record[3],
    'city': record[4],
    'state': record[5],
    'zipcode': record[6]
    }
    )

    '''

    def query_database():

    #Create a Database or use an existing
    conn = sqlite3.connect('userregistration.db')

    #Create cursor
    c = conn.cursor()

    c.execute("SELECT * FROM user_data")
    records = c.fetchall()

    #Add our data to the screen
    global count
    count = 0


    for record in records:
    if count % 2 == 0:
    my_tree.insert(parent='', index='end', iid=count, text='', values=(record[0],
    record[1], record[2], record[3], record[4], record[5], record[6]), tags=
    ('evenrow',))
    else:
    my_tree.insert(parent='', index='end', iid=count, text='', values=(record[0],
    record[1], record[2], record[3], record[4], record[5], record[6]), tags=
    ('oddrow',))
    #increment counter
    count +=1
    #print(record)

    #Commit changes
    conn.commit()

    #Close Database
    #conn.close()


    #Add some style
    style = ttk.Style()

    #Pick a Theme
    style.theme_use('default')

    #Configure the Treeview color
    style.configure("Treeview",
    bakground="#D3D3D3",
    FOREGROUND="black",
    rowheight=25,
    fieldbackground="#D3D3D3")

    #Change selected color
    style.map('Treeview',
    bakground=[('selected', "#D347083")])

    #Create the Treeview Frame
    tree_frame = Frame(root)
    tree_frame.pack(pady=10)

    #Create the Treeview Scrollbar
    tree_scroll = Scrollbar(tree_frame)
    tree_scroll.pack(side=RIGHT, fill=Y)

    #Create the Treeview
    my_tree = ttk.Treeview(tree_frame, yscrollcommand=tree_scroll.set, selectmode="extended")
    my_tree.pack()

    #Configure Scrollbar
    tree_scroll.config(command=my_tree.yview)

    #Defining Columns
    my_tree['columns'] = ("First Name", "Last Name", "ID", "Address", "City", "State", "Zipcode")

    #Formating our columns
    my_tree.column("#0", width=0, stretch=NO)
    my_tree.column("First Name", anchor=W, width=140)
    my_tree.column("Last Name", anchor=W, width=140)
    my_tree.column("ID", anchor=CENTER, width=100)
    my_tree.column("Address", anchor=CENTER, width=140)
    my_tree.column("City", anchor=CENTER, width=140)
    my_tree.column("State", anchor=CENTER, width=140)
    my_tree.column("Zipcode", anchor=CENTER, width=140)

    #Creating headings
    my_tree.heading("#0", text="", anchor=W)
    my_tree.heading("First Name", text="First Name", anchor=W)
    my_tree.heading("Last Name", text="Last Name", anchor=W)
    my_tree.heading("ID", text="ID", anchor=CENTER)
    my_tree.heading("Address", text="Address", anchor=CENTER)
    my_tree.heading("City", text="City", anchor=CENTER)
    my_tree.heading("State", text="State", anchor=CENTER)
    my_tree.heading("Zipcode", text="Zipcode", anchor=CENTER)

    #Add our data to the screen
    global count
    count = 0


    for record in Data:
    if count % 2 == 0:
    my_tree.insert(parent='', index='end', iid=count, text='', values=(record[0], record[1], record[2], record[3], record[4], record[5], record[6]), tags=('evenrow',))
    else:
    my_tree.insert(parent='', index='end', iid=count, text='', values=(record[0], record[1], record[2], record[3], record[4], record[5], record[6]), tags=('oddrow',))
    #increment counter
    count +=1
    #print(record)

    def function1():
    activate_search_button.config(text="Deactivate Search", bg="green", fg="white", command=function2)
    activate_search_button.grid(row=1, column=1, padx=10, pady=10)
    print("Function 1 executed")
    #function2()

    def function2():
    activate_search_button.config(text="Function3", bg="green", fg="white",
    command=function2)
    activate_search_button.grid(row=1, column=1, pdx=10, pady=10)

    btn.config(text="Function2", bg="red", fg="white")
    print("Function 2 executed")

    def combined_function():
    function1()
    #function2()


    def activate_search():

    global activateSearch
    activateSearch = True

    fn_entry.delete(0, END)
    ln_entry.delete(0, END)
    id_entry.delete(0, END)
    address_entry.delete(0, END)
    city_entry.delete(0, END)
    state_entry.delete(0, END)
    zipcode_entry.delete(0, END)

    function1()


    '''
    selected_item = my_tree.focus() # Get the ID of the selected item
    item_values = my_tree.item(selected_item, "values")
    print(item_values)
    print(selected_item)

    first_item = my_tree.get_children()[0] # Get the first item's ID
    my_tree.selection_set(first_item)
    my_tree.focus(first_item)
    print(first_item)

    #activate_search_button.config(state=DISABLED)

    if activate_search_button['state'] == 'normal':
    activate_search_button['state'] = DISABLED
    execute_search_button['state'] = 'normal'
    else:
    activate_search_button['state'] = 'normal'
    '''


    def execute_search(event):
    global count
    count = 0

    my_tree.delete(*my_tree.get_children())
    query = fn_entry.get().lower()
    for item in Data:
    if query in item[0].lower():
    tag = 'evenrow' if (count%2 == 0) else 'oddrow'
    my_tree.insert("", "end", values=item, tags=(tag,))
    count += 1
    print(f"Contenido de Query in function execute_search, {query}")
    print(f"Contenido de Item in Query in function execute_search, {item}")



    def on_tree_select(event):


    values3 = []
    #selected_item = my_tree.selection()[0] # Get selected item
    selected_item = my_tree.selection()[0] # Get selected item
    item_values = my_tree.item(selected_item, "values") # Get the values of the selected
    item
    focused_item = my_tree.focus()


    fn_entry.delete(0, END)
    ln_entry.delete(0, END)
    id_entry.delete(0, END)
    address_entry.delete(0, END)
    city_entry.delete(0, END)
    state_entry.delete(0, END)
    zipcode_entry.delete(0, END)

    # Insert the first value into the entry widget
    fn_entry.insert(0, item_values[0])
    ln_entry.insert(0, item_values[1])
    id_entry.insert(0, item_values[2])
    address_entry.insert(0, item_values[3])
    city_entry.insert(0, item_values[4])
    state_entry.insert(0, item_values[5])
    zipcode_entry.insert(0, item_values[6])



    def add_record():
    pass




    def update_record():

    selected = my_tree.focus()

    my_tree.item(selected, text="", values=(fn_entry.get(), ln_entry.get(), id_entry.get(),
    address_entry.get(), city_entry.get(), state_entry.get(), zipcode_entry.get(),))


    def clear_entries():
    fn_entry.delete(0, END)
    ln_entry.delete(0, END)
    id_entry.delete(0, END)
    address_entry.delete(0, END)
    city_entry.delete(0, END)
    state_entry.delete(0, END)
    zipcode_entry.delete(0, END)


    def select_record(e):

    fn_entry.delete(0, END)
    ln_entry.delete(0, END)
    id_entry.delete(0, END)
    address_entry.delete(0, END)
    city_entry.delete(0, END)
    state_entry.delete(0, END)
    zipcode_entry.delete(0, END)

    selected = my_tree.focus()

    values = my_tree.item(selected, 'values')

    fn_entry.insert(0, values[0])
    ln_entry.insert(0, values[1])
    id_entry.insert(0, values[2])
    address_entry.insert(0, values[3])
    city_entry.insert(0, values[4])
    state_entry.insert(0, values[5])
    zipcode_entry.insert(0, values[6])


    def select_first_record():
    first_item = my_tree.get_children()[0] # Get the first item's ID
    my_tree.selection_set(first_item) # Select the first item
    my_tree.focus(first_item) # Set focus to the first item

    def up():

    curSelection = my_tree.selection()
    nextSelection = my_tree.prev(curSelection) # next row

    if nextSelection < str(0):
    messagebox.showwarning(title="Error", message="First Record")
    else:
    my_tree.selection_set(nextSelection) # set the next row to be the current row
    my_tree.see(nextSelection)


    def down():

    curSelection = my_tree.selection()
    nextSelection = my_tree.next(curSelection) # next row
    if nextSelection < str(0):
    messagebox.showwarning(title="Error", message="Last Record")
    else:
    my_tree.selection_set(nextSelection) # set the next row to be the current row
    my_tree.see(nextSelection)


    def remove_one():
    selected_values = my_tree.selection()
    if not selected_values:
    messagebox.showwarning(title="Error", message="Select a Record")
    else:
    x = my_tree.selection()[0]
    my_tree.delete(x)
    values_list = []
    for item in my_tree.get_children():
    values = my_tree.item(item, "values")
    values_list.append(values)
    #print(values)
    my_tree.delete(item)

    query_database(values_list)


    def remove_many():
    selected_values = my_tree.selection()
    if not selected_values:
    messagebox.showwarning(title="Error", message="Select Records")
    else:
    x = my_tree.selection()
    for record in x:
    my_tree.delete(record)

    values_list = []
    for item in my_tree.get_children():
    values = my_tree.item(item, "values")
    values_list.append(values)
    #print(values)
    my_tree.delete(item)

    query_database(values_list)


    def remove_all():
    for record in my_tree.get_children():
    my_tree.delete(record)


    def query_database(values_list):

    global count
    count = 0

    for record in values_list:
    if count % 2 == 0:
    my_tree.insert(parent='', index='end', iid=count, text='', values=(record[0], record[1], record[2], record[3], record[4], record[5], record[6]), tags=('evenrow',))
    else:
    my_tree.insert(parent='', index='end', iid=count, text='', values=(record[0], record[1], record[2], record[3], record[4], record[5], record[6]), tags=('oddrow',))
    #increment counter
    count +=1
    #print(record)

    #Create straped row tags
    my_tree.tag_configure('oddrow', background="white")
    my_tree.tag_configure('evenrow', background="lightblue")


    # Call the function after the window is loaded
    root.after(100, select_first_record)

    #Add record entry boxes
    data_frame = LabelFrame(root, text="Record")
    data_frame.pack(fill="x", expand=True, padx=20)

    fn_label = Label(data_frame, text="First Name")
    fn_label.grid(row=0, column=0, padx=10)
    fn_entry = Entry(data_frame)
    fn_entry.grid(row=0, column=1, padx=10)

    ln_label = Label(data_frame, text="Last Name")
    ln_label.grid(row=0, column=2, padx=10)
    ln_entry = Entry(data_frame)
    ln_entry.grid(row=0, column=3, padx=10)

    id_label = Label(data_frame, text="ID")
    id_label.grid(row=0, column=4, padx=10)
    id_entry = Entry(data_frame)
    id_entry.grid(row=0, column=5, padx=10)

    address_label = Label(data_frame, text="Address")
    address_label.grid(row=2, column=0, padx=10)
    address_entry = Entry(data_frame)
    address_entry.grid(row=2, column=1, padx=10)

    city_label = Label(data_frame, text="City")
    city_label.grid(row=2, column=2, padx=10)
    city_entry = Entry(data_frame)
    city_entry.grid(row=2, column=3, padx=10)

    state_label = Label(data_frame, text="State")
    state_label.grid(row=2, column=4, padx=10)
    state_entry = Entry(data_frame)
    state_entry.grid(row=2, column=5, padx=10)

    zipcode_label = Label(data_frame, text="Zipcode")
    zipcode_label.grid(row=2, column=6, padx=10)
    zipcode_entry = Entry(data_frame)
    zipcode_entry.grid(row=2, column=7, padx=10)

    #Add buttons
    button_frame = LabelFrame(root, text="Commands")
    button_frame.pack(fill="x", expand=True, padx=10)

    update_button = Button(button_frame,text="Update Record", command=update_record)
    update_button.grid(row=0, column=0, padx=10, pady=10)

    add_button = Button(button_frame,text="Add Record", command=add_record)
    add_button.grid(row=0, column=1, padx=10, pady=10)

    remove_all_button = Button(button_frame,text="Remove All Records", command=remove_all)
    remove_all_button.grid(row=0, column=2, padx=10, pady=10)

    remove_one_button = Button(button_frame,text="Remove One Selected", command=remove_one)
    remove_one_button.grid(row=0, column=3, padx=10, pady=10)

    remove_many_button = Button(button_frame,text="Remove Many Selected", command = remove_many)
    remove_many_button.grid(row=0, column=4, padx=10, pady=10)

    move_up_button = Button(button_frame,text="Move Up", command=up)
    move_up_button.grid(row=0, column=5, padx=10, pady=10)

    move_down_button = Button(button_frame,text="Move Down", command=down)
    move_down_button.grid(row=0, column=6, padx=10, pady=10)

    clear_entries_button = Button(button_frame,text="Clear Entry Boxes", command=clear_entries)
    clear_entries_button.grid(row=1, column=0, padx=10, pady=10)

    activate_search_button = Button(button_frame,text="activate_search", state='normal', command=activate_search)
    activate_search_button.grid(row=1, column=1, padx=10, pady=10)

    #activate_search_button = Button(button_frame,text="activate_search", state='normal', command=activate_search)
    #activate_search_button.grid(row=1, column=1, padx=10, pady=10)

    refresh_treeview_button= Button(button_frame,text="Refresh Treeview", state=ACTIVE, command=query_database)
    refresh_treeview_button.grid(row=1, column=2, padx=10, pady=10)


    #my_tree.bind("<ButtonRelease-1>", select_record)

    #fn_entry.bind("<KeyRelease>", lambda event: execute_search())


    my_tree.bind("<<TreeviewSelect>>", on_tree_select)

    '''

    if activateSearch == True:
    activate_search_button['state'] = DISABLED
    execute_search_button = Button(button_frame, text="Execute Search", state='normal')
    execute_search_button.grid(row=1, column=3, padx=10, pady=10)

    '''

    fn_entry.bind('<KeyRelease>', execute_search)

    root.mainloop()

    Continue reading...

Compartilhe esta Página