[Tutor] getting back my listbox items
Ali M
adeadmarshal at gmail.com
Sun Jun 24 13:26:12 EDT 2018
Hi, when i do search in my Entrybox the list lowers down to that typed item
the code of which i wrote in the update_list function. how should i get
listbox items back again after it has been lowered? and another question:
if i want to format some specific text in my Text widget i should use
BeautifulSoup or can i do that with add_tag method? i used add_tag method
in my enter_meaning function but it formats the first 4 letters of anyword,
but i want the words which are in the listofwords to be formatted.
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.button_search = ttk.Button(self.frame_content, text="Search")
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.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')
for row in self.cur:
self.listbox.insert(tk.END, row)
for row in range(0, self.listbox.size(), 2):
self.listbox.itemconfigure(row, background="#f0f0ff")
def update_list(self):
search_term = self.search_var.get()
for item in self.listbox.get(0, tk.END):
if search_term.lower() in item:
self.listbox.delete(0, tk.END)
self.listbox.insert(tk.END, item)
# SQLite
def enter_meaning(self, tag):
for index in self.listbox.curselection():
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)
listofwords = ("gram", "med")
self.textbox.tag_add('listofwords', '1.0', '1.4')
self.textbox.tag_configure('listofwords',
background='yellow', font='helvetica 14 bold', relief='raised')
def entry_delete(self, tag):
self.entry_search.delete(0, tk.END)
return None
def entry_insert(self, tag):
self.entry_search.delete(0, tk.END)
self.entry_search.insert(0, "Type to Search")
return None
def main():
root = tk.Tk()
esperantodict = EsperantoDict(root)
root.mainloop()
if __name__ == '__main__': main()
# db tbl name: Words
# db first field name: Esperanto
# db second field name: English
More information about the Tutor
mailing list