If i delete this line "self.textbox.delete(1.0, tk.END)" in my enter_meaning function the listbox items won't lower down to 1 item and i just want 1 item to be shown after user searches the item in entrybox. what i want to do is: when user searches in entrybox, the listbox items lowers down to that searched item only, and when i click on that 1 remaining item, the results from db prints in text widget, i want to be able to also use the button to print it. how can i configure the button for this? i hope i explained clearly.
import sqlite3 as sqlite import tkinter as tk from tkinter import ttk # GUI Widgets class EsperantoDict: def __init__(self, master): master.title("EsperantoDict") master.iconbitmap("Esperanto.ico") master.resizable(False, False) master.configure(background='#EAFFCD') self.style = ttk.Style() self.search_var = tk.StringVar() self.search_var.trace("w", lambda name, index, mode: self.update_list()) self.style = ttk.Style() self.style.configure("TFrame", background='#EAFFCD') self.style.configure("TButton", background='#C6FF02') self.style.configure("TLabel", background='#EAFFCD') self.frame_header = ttk.Frame(master, relief=tk.FLAT) self.frame_header.config(style="TFrame") self.frame_header.pack(side=tk.TOP, padx=5, pady=5) self.logo = tk.PhotoImage(file=r'C:\EsperantoDict\eo.png') self.small_logo = self.logo.subsample(10, 10) ttk.Label(self.frame_header, image=self.small_logo).grid(row=0, column=0, stick="ne", padx=5, pady=5, rowspan=2) ttk.Label(self.frame_header, text='EsperantoDict', font=('Arial', 18, 'bold')).grid(row=0, column=1) self.frame_content = ttk.Frame(master) self.frame_content.config(style="TFrame") self.frame_content.pack() self.entry_search = ttk.Entry(self.frame_content, textvariable=self.search_var, width=30) self.entry_search.bind('<FocusIn>', self.entry_delete) self.entry_search.bind('<FocusOut>', self.entry_insert) self.entry_search.grid(row=0, column=0, padx=5) self.entry_search.focus() self.entry_search.bind("<KeyRelease>", self.edit_input) self.button_search = ttk.Button(self.frame_content, text=u"Serĉu") self.photo_search = tk.PhotoImage(file=r'C:\EsperantoDict\search.png') self.small_photo_search = self.photo_search.subsample(3, 3) self.button_search.config(image=self.small_photo_search, compound=tk.LEFT, style="TButton") self.button_search.grid(row=0, column=2, columnspan=1, sticky='nw', padx=5) self.button_search.bind('<Return>', self.search_word) self.listbox = tk.Listbox(self.frame_content, height=30, width=30) self.listbox.grid(row=1, column=0, padx=5) self.scrollbar = ttk.Scrollbar(self.frame_content, orient=tk.VERTICAL, command=self.listbox.yview) self.scrollbar.grid(row=1, column=1, sticky='nsw') self.listbox.config(yscrollcommand=self.scrollbar.set) self.listbox.bind('<<ListboxSelect>>', self.enter_meaning) self.textbox = tk.Text(self.frame_content, relief=tk.GROOVE, width=60, height=30, borderwidth=2) self.textbox.config(wrap='word') self.textbox.grid(row=1, column=2, sticky='w', padx=5) # SQLite self.db = sqlite.connect(r'C:\EsperantoDict\test.db') self.cur = self.db.cursor() self.cur.execute("SELECT Esperanto FROM Words ORDER BY Esperanto") for row in self.cur: self.listbox.insert(tk.END, row) self.update_list() def update_list(self): self.listbox.delete(0, tk.END) search_term = self.search_var.get().lower() if search_term == 'type to search': search_term = '' self.cur.execute("SELECT Esperanto FROM Words WHERE LOWER(Esperanto) LIKE ? ORDER BY Esperanto", ('%' + search_term + '%',)) for row in self.cur: item = row[0] self.listbox.insert(tk.END, item) for row in range(0, self.listbox.size(), 2): self.listbox.itemconfigure(row, background="#f0f0ff") def edit_input(self, tag): word_to_esp = {'gx': 'ĝ', 'cx': 'ĉ', 'hx': 'ĥ', 'jx': 'ĵ', 'ux': 'ŭ', 'sx': 'ŝ'} user_input = self.entry_search.get() user_input = user_input.lower() for i in word_to_esp: if user_input.__contains__(i): a = user_input.replace(i, word_to_esp[i]) return self.search_var.set(a) # SQLite def enter_meaning(self, tag): for index in self.listbox.curselection(): global esperanto global results esperanto = self.listbox.get(index) results = self.cur.execute("SELECT English FROM Words WHERE Esperanto = ?", (esperanto,)) for row in results: self.textbox.delete(1.0, tk.END) self.textbox.insert(tk.END, row[0]) def entry_delete(self, tag): if self.entry_search.get(): self.entry_search.delete(0, tk.END) self.textbox.delete(1.0, tk.END) return None def entry_insert(self, tag): if self.entry_search.get() == '': self.entry_search.insert(0, "Type to Search") return None def search_word(self, index): self.listbox.curselection() if self.search_var.get() == self.listbox.get(index): self.textbox.delete(1.0, tk.END) for row in results: self.textbox.insert(tk.END, row[0]) def main(): root = tk.Tk() EsperantoDict(root) root.mainloop() if __name__ == '__main__': main() # db tbl name: Words # db first field name: Esperanto # db second field name: English _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor