spacepaste

  1.  
  2. import sqlite3 as sqlite
  3. import tkinter as tk
  4. from tkinter import ttk
  5. # GUI Widgets
  6. class EsperantoDict:
  7. def __init__(self, master):
  8. master.title("EsperantoDict")
  9. master.iconbitmap("Esperanto.ico")
  10. master.resizable(False, False)
  11. master.configure(background='#EAFFCD')
  12. self.style = ttk.Style()
  13. self.search_var = tk.StringVar()
  14. self.search_var.trace("w", lambda name, index, mode: self.update_list())
  15. self.style = ttk.Style()
  16. self.style.configure("TFrame", background='#EAFFCD')
  17. self.style.configure("TButton", background='#C6FF02')
  18. self.style.configure("TLabel", background='#EAFFCD')
  19. self.frame_header = ttk.Frame(master, relief=tk.FLAT)
  20. self.frame_header.config(style="TFrame")
  21. self.frame_header.pack(side=tk.TOP, padx=5, pady=5)
  22. self.logo = tk.PhotoImage(file=r'C:\EsperantoDict\eo.png')
  23. self.small_logo = self.logo.subsample(10, 10)
  24. ttk.Label(self.frame_header, image=self.small_logo).grid(row=0, column=0, stick="ne", padx=5, pady=5, rowspan=2)
  25. ttk.Label(self.frame_header, text='EsperantoDict', font=('Arial', 18, 'bold')).grid(row=0, column=1)
  26. self.frame_content = ttk.Frame(master)
  27. self.frame_content.config(style="TFrame")
  28. self.frame_content.pack()
  29. self.entry_search = ttk.Entry(self.frame_content, textvariable=self.search_var, width=30)
  30. self.entry_search.bind('<FocusIn>', self.entry_delete)
  31. self.entry_search.bind('<FocusOut>', self.entry_insert)
  32. self.entry_search.grid(row=0, column=0, padx=5)
  33. self.entry_search.focus()
  34. self.entry_search.bind("<Key>", self.edit_input)
  35. self.button_search = ttk.Button(self.frame_content, text="Search")
  36. self.photo_search = tk.PhotoImage(file=r'C:\EsperantoDict\search.png')
  37. self.small_photo_search = self.photo_search.subsample(3, 3)
  38. self.button_search.config(image=self.small_photo_search, compound=tk.LEFT, style="TButton")
  39. self.button_search.grid(row=0, column=2, columnspan=1, sticky='nw', padx=5)
  40. self.button_search.bind('<Return>', self.search_word)
  41. self.listbox = tk.Listbox(self.frame_content, height=30, width=30)
  42. self.listbox.grid(row=1, column=0, padx=5)
  43. self.scrollbar = ttk.Scrollbar(self.frame_content, orient=tk.VERTICAL, command=self.listbox.yview)
  44. self.scrollbar.grid(row=1, column=1, sticky='nsw')
  45. self.listbox.config(yscrollcommand=self.scrollbar.set)
  46. self.listbox.bind('<<ListboxSelect>>', self.enter_meaning)
  47. self.textbox = tk.Text(self.frame_content, relief=tk.GROOVE, width=60, height=30, borderwidth=2)
  48. self.textbox.config(wrap='word')
  49. self.textbox.grid(row=1, column=2, sticky='w', padx=5)
  50. # SQLite
  51. self.db = sqlite.connect(r'C:\EsperantoDict\test.db')
  52. self.cur = self.db.cursor()
  53. self.cur.execute("SELECT Esperanto FROM Words ORDER BY Esperanto")
  54. for row in self.cur:
  55. self.listbox.insert(tk.END, row)
  56. self.update_list()
  57. def update_list(self):
  58. self.listbox.delete(0, tk.END)
  59. search_term = self.search_var.get().lower()
  60. if search_term == 'type to search':
  61. search_term = ''
  62. self.cur.execute("SELECT Esperanto FROM Words WHERE LOWER(Esperanto) LIKE ? ORDER BY Esperanto",
  63. ('%'+search_term+'%',))
  64. for row in self.cur:
  65. item = row[0]
  66. self.listbox.insert(tk.END, item)
  67. for row in range(0, self.listbox.size(), 2):
  68. self.listbox.itemconfigure(row, background="#f0f0ff")
  69. def edit_input(self, input):
  70. words = ["ĝ", "ĉ", "ĥ", "ĵ", "ŭ", "ŝ"]
  71. char = ["gx", "cx", "hx", "jx", "ux", "sx"]
  72. letter = ''
  73. if True:
  74. user_in = self.search_var.get().lower()
  75. if user_in in char:
  76. if char[0] in user_in:
  77. letter = words[0]
  78. elif char[1] in user_in:
  79. letter = words[1]
  80. elif char[2] in user_in:
  81. letter = words[2]
  82. elif char[3] in user_in:
  83. letter = words[3]
  84. elif char[4] in user_in:
  85. letter = words[4]
  86. elif char[5] in user_in:
  87. letter = words[5]
  88. return self.entry_search.insert(tk.INSERT, letter)
  89. # SQLite
  90. def enter_meaning(self, tag):
  91. for index in self.listbox.curselection():
  92. esperanto = self.listbox.get(index)
  93. results = self.cur.execute("SELECT English FROM Words WHERE Esperanto = ?", (esperanto,))
  94. for row in results:
  95. self.textbox.delete(1.0, tk.END)
  96. self.textbox.insert(tk.END, row[0])
  97. def entry_delete(self, tag):
  98. if self.entry_search.get() == 'Type to Search':
  99. self.entry_search.delete(0, tk.END)
  100. return None
  101. def entry_insert(self, tag):
  102. if self.entry_search.get() == '':
  103. self.entry_search.insert(0, "Type to Search")
  104. return None
  105. def search_word(self):
  106. esperanto = self.listbox.selection_set(0)
  107. results = self.cur.execute("SELECT English FROM Words WHERE Esperanto = ?", (esperanto,))
  108. for row in results:
  109. self.textbox.delete(1.0, tk.END)
  110. self.textbox.insert(tk.END, row[0])
  111. def main():
  112. root = tk.Tk()
  113. EsperantoDict(root)
  114. root.mainloop()
  115. if __name__ == '__main__': main()
  116. # db tbl name: Words
  117. # db first field name: Esperanto
  118. # db second field name: English
  119.