How would you double click on a column in a tree view table to then display the specific records on entry fields on a new window.
def SearchCustomer(self):
connection = sqlite3.connect("Guestrecord.db")
cursor = connection.cursor()
columnID = ["GuestID","title","firstName","surname","dob","payment","email","phoneno","address","postcode"]
columnStr =["GuestID","Title","FirstName","Surname","DOB","Payment","Email","PhoneNo","Address","Postcode"]
self.search_table = ttk.Treeview(self.search_frame,columns=columnID,show="headings")
## self.search_table.bind("<Motion>","break")
for i in range(0,10):
self.search_table.heading(columnID[i],text = columnStr[i])
self.search_table.column(columnID[i],minwidth = 0, width = 90)
self.search_table.place(x=0,y=0)
for GuestRec in cursor.execute("SELECT * FROM tb1Guest1"):
self.search_table.insert("",END,values=GuestRec)
self.search_table.bind("<Double-1>", self.OnDoubleClick)
connection.commit()
connection.close()
SearchCustomer(self)
sqlCommand = """
CREATE TABLE IF NOT EXISTS tb1Guest1
(
guestID INTEGER NOT NULL,
guestTitle TEXT,
guestFirstname TEXT,
guestSurname TEXT,
guestDOB DATE,
guestPaymentType TEXT,
guestEmail TEXT,
guestPhoneNumber INTEGER,
guestAddress TEXT,
guestPostcode TEXT,
primary key (guestID)
)
"""
self.search_firstname = Entry(self.search_frame2, width=25,bg="#e2f0d9",font=("Avenir Next",18),highlightthickness = 0,relief=FLAT)
self.search_firstname.place(x = 140, y =0)
self.search_firstname_label = Label(self.search_frame2,bg = "white", text = "First Name", font=("Avenir Next",20))
self.search_firstname_label.place(x= 30,y=0)
self.search_Surname = Entry(self.search_frame2, width=25,bg="#e2f0d9",font=("Avenir Next",18),highlightthickness = 0,relief=FLAT)
self.search_Surname.place(x = 540, y =0)
self.search_Surname_label = Label(self.search_frame2,bg = "white", text = "Surname", font=("Avenir Next",20))
self.search_Surname_label.place(x= 450,y=0)
## Binding entries
self.search_firstname.bind("<KeyRelease>",self.Search)
self.search_Surname.bind("<KeyRelease>",self.Search)
def OnDoubleClick(self, event):
self.gf_window.destroy()
self.search_results()
This is the my code for displaying my records in my search tree view table. I am able to double click on a column to then bring up a new window but I am unsure how I would display the specific records on my entry fields I am making on the new window? If anyone could suggest a solution to this torment it would be much amazing. Thanks in advance.
You should be able to grab the selected Treeview
item from the mouse event
being passed to your OnDoubleClick()
function. If you want to open a new window that's a child of your root window, you'll want a Toplevel
widget. You can treat that Toplevel
window pretty much just like you would a root Tk
window.
# side note: this should really be named "on_double_click" by convention
def OnDoubleClick(self, event):
tree = event.widget # get the treeview widget
region = tree.identify_region(event.x, event.y) # get click location
iid = tree.identify('item', event.x, event.y) # get item ID
if region == 'cell': # i.e., if the click wasn't on the header row...
data = tree.item(iid)['values'] # get the item data
window = Toplevel(self)
window.transient(self) # optional: hide window controls except [x], pull focus
# whatever you want here...
window.geometry = '400x600'
window.title('Results')
label = ttk.Label(window, text=data)
label.pack()
# yadda yadda...