Generation

code to explanationSun, 12 Feb 2023

import pymongo import tkinter as tk from tkinter import ttk import pyaudio import wave class MongoDBGUI: def __init__(self, master): self.master = master self.master.title("MongoDB Cloud Search and Display") self.master.geometry("1280x720") #self.background_image = tk.PhotoImage(file="/home/glitch/Pictures/Screenshots/Screenshot from 2023-02-10 22-06-45.png") #self.background_label = tk.Label(self.master, image=self.background_image) #self.background_label.place(relwidth=1, relheight=1) #self.background_label.lower(self.master) #self.background_image = tk.PhotoImage(file="/home/glitch/Pictures/Screenshots/Screenshot from 2023-02-10 22-06-45.png") #self.background_label = tk.Label(self.master, image=self.background_image) #self.background_label.pack(fill='both', expand=True) self.background_image = tk.PhotoImage(file="/home/glitch/Desktop/audio/background.png") self.background_label = tk.Label(self.master, image=self.background_image) self.background_label.place(relwidth=1, relheight=1) self.label = tk.Label(self.master, text="Enter search criteria:") self.label.pack() self.entry = tk.Entry(self.master) self.entry.pack() self.search_button = tk.Button(self.master, text="Search", command=self.search) self.search_button.pack() self.tree = ttk.Treeview(self.master) self.tree.pack() self.tree["columns"] = ("transcript", "audio_file", "audio") self.tree.column("transcript", width=400, anchor="center") self.tree.column("audio_file", width=150, anchor="center") self.tree.column("audio", width=50, anchor="center") self.tree.heading("transcript", text="Transcript") self.tree.heading("audio_file", text="Audio File Number") self.tree.heading("audio", text="Audio") self.client = pymongo.MongoClient("mongodb+srv://user01:user01@sampledb.d1dklna.mongodb.net/?retryWrites=true&w=majority") self.db = self.client["test"] self.collection = self.db["calls"] def search(self): self.tree.delete(*self.tree.get_children()) search_criteria = self.entry.get() results = self.collection.find({"transcript": {"$regex": search_criteria}}) for result in results: self.tree.insert("","end", values=(result["transcript"], result["audio_file"], "Play"), tags=("play_audio",)) self.tree.tag_bind("play_audio", "<Button-1>", self.play_audio) def play_audio(self, event): selected_item = self.tree.selection()[0] item_id = self.tree.item(selected_item, "text") call = self.collection.find_one({"_id": item_id}) audio = call["audio"] CHUNK = 1024 p = pyaudio.PyAudio() stream = p.open(format=p.get_format_from_width(2), channels=1, rate=16000, output=True) with wave.open(audio_file, 'rb') as data: while True: chunk = data.readframes(CHUNK) if len(chunk) == 0: break stream.write(chunk) stream.stop_stream() stream.close() p.terminate() if __name__ == "__main__": root = tk.Tk() app = MongoDBGUI(root) root.mainloop()

* In case of large code blocks, you can add line numbering to the code block. We use the following syntax for line numbering.

Questions about programming?Chat with your personal AI assistant