Pygmales
loaded project
2b7b752
from tkinter import *
from tkinter import ttk
from src.apps.dbapp.framebase import CustomFrameBase
from src.database.weavservice import WeaviateService
class QueryFrame(CustomFrameBase):
def __init__(self, parent, service: WeaviateService) -> None:
super().__init__(parent, service)
def init(self) -> ttk.Frame:
main_frame = ttk.Frame(self._parent)
main_frame.pack(fill=BOTH, expand=True)
input_frame = ttk.Frame(main_frame)
input_frame.pack(fill=X, padx=10, pady=(5, 10))
self.language_var = StringVar(value="de")
self.filters_button = ttk.Button(input_frame, text="Filters...", command=self.open_filters)
self.filters_button.pack(side=LEFT, padx=(0, 10))
lang_frame = ttk.Frame(input_frame)
lang_frame.pack(side=LEFT, padx=(0, 15))
ttk.Radiobutton(
lang_frame,
text="EN",
variable=self.language_var,
value="en"
).pack(side=LEFT, padx=(0, 8))
ttk.Radiobutton(
lang_frame,
text="DE",
variable=self.language_var,
value="de"
).pack(side=LEFT)
self.query_entry = ttk.Entry(input_frame)
self.query_entry.pack(side=LEFT, fill=X, expand=True, padx=(0, 10))
self.send_button = ttk.Button(input_frame, text="Send", command=self.send_query)
self.send_button.pack(side=RIGHT)
self.query_entry.bind("<Return>", lambda _: self.send_query())
results_frame = ttk.Frame(main_frame)
results_frame.pack(fill=BOTH, expand=True, padx=10, pady=(10, 5))
self.results_text = Text(results_frame, wrap=WORD, font=("TkDefaultFont", 10))
y_scrollbar = ttk.Scrollbar(results_frame, orient=VERTICAL, command=self.results_text.yview)
self.results_text.configure(yscrollcommand=y_scrollbar.set)
self.results_text.pack(side=LEFT, fill=BOTH, expand=True)
y_scrollbar.pack(side=RIGHT, fill=Y)
self.results_text.config(state=NORMAL)
self.results_text.insert(END, "Enter your query below and click Send (or press Enter) to see results.\n")
self.results_text.config(state=DISABLED)
return main_frame
def send_query(self):
query_text = self.query_entry.get().strip()
if not query_text:
return
self.query_entry.delete(0, END)
try:
response, _ = self._service.query(
lang=self.language_var.get(),
query=query_text,
)
result_str = ''.join([f"""
---------------------- Result {idx} ----------------------
SOURCE: {obj.properties['source']}
INSERTION DATE: {obj.properties['date']}
RELEVANT PROGRAMS: {', '.join(obj.properties['programs'])}
CONTENT:
{obj.properties['body']}
VECTOR:
{obj.vector}
""" for idx, obj in enumerate(response.objects, start=1)])
result_str = f"Query: {query_text}\n{result_str}"
self.display_result(result_str)
except Exception as e:
self.display_result(f"Error:\n{str(e)}")
def display_result(self, result_text: str):
self.results_text.config(state=NORMAL)
self.results_text.delete(1.0, END)
self.results_text.insert(END, result_text + "\n")
self.results_text.config(state=DISABLED)
self.results_text.see(1.0)
def open_filters(self):
dialog = Toplevel(self._parent)
dialog.title("Query Filters")
dialog.geometry("400x300")
dialog.grab_set()