Download chatbot/src/gui.py from Vivekkrishu/Chatbot: direct link, hf CLI and curl.
- Browser
- Download file 3.49 kB
-
https://huggingface.co/Vivekkrishu/Chatbot/resolve/main/chatbot/src/gui.py
- Command line
-
hf download hf://Vivekkrishu/Chatbot/chatbot/src/gui.py
-
curl -L -o gui.py https://huggingface.co/Vivekkrishu/Chatbot/resolve/main/chatbot/src/gui.py
3.49 kB
| import tkinter as tk | |
| from tkinter import Canvas, Frame, Scrollbar, Label, Entry, BOTH, RIGHT, LEFT, Y, NW | |
| from predict import chatbot_response | |
| class ChatbotGUI: | |
| def __init__(self, root): | |
| self.root = root | |
| self.root.title("LMS Chatbot") | |
| self.root.geometry("500x600") | |
| self.root.minsize(400, 400) | |
| self.root.configure(bg="#f0f0f0") | |
| # Chat frame with canvas for scrolling | |
| self.frame = Frame(root, bg="#f0f0f0") | |
| self.frame.pack(padx=10, pady=10, fill=BOTH, expand=True) | |
| self.canvas = Canvas(self.frame, bg="#f0f0f0", highlightthickness=0) | |
| self.scrollbar = Scrollbar(self.frame, orient="vertical", command=self.canvas.yview) | |
| self.scrollable_frame = Frame(self.canvas, bg="#f0f0f0") | |
| self.scrollable_frame.bind( | |
| "<Configure>", | |
| lambda e: self.canvas.configure(scrollregion=self.canvas.bbox("all")) | |
| ) | |
| self.canvas.create_window((0, 0), window=self.scrollable_frame, anchor=NW) | |
| self.canvas.configure(yscrollcommand=self.scrollbar.set) | |
| self.canvas.pack(side=LEFT, fill=BOTH, expand=True) | |
| self.scrollbar.pack(side=RIGHT, fill=Y) | |
| # Entry box | |
| self.entry = Entry(root, font=("Helvetica", 14), bd=2, relief="groove") | |
| self.entry.pack(padx=10, pady=10, fill="x") | |
| self.entry.bind("<Return>", self.send_message) | |
| # Typing indicator | |
| self.typing_label = Label(root, text="", bg="#f0f0f0", fg="gray", font=("Helvetica", 10)) | |
| self.typing_label.pack(pady=(0,5)) | |
| def send_message(self, event): | |
| user_input = self.entry.get().strip() | |
| if not user_input: | |
| return | |
| self.entry.delete(0, tk.END) | |
| self.add_message(user_input, sender="user") | |
| self.typing_label.config(text="Bot is typing...") | |
| self.root.after(500, lambda: self.bot_reply(user_input)) | |
| def bot_reply(self, user_input): | |
| response = chatbot_response(user_input) | |
| self.typing_label.config(text="") | |
| self.animate_bot_response(response) | |
| def add_message(self, message, sender="bot"): | |
| bubble = Label(self.scrollable_frame, text=message, wraplength=300, justify="left", | |
| bg="#DCF8C6" if sender=="user" else "#FFFFFF", | |
| fg="#000000", font=("Helvetica", 12), padx=10, pady=5, bd=1, relief="solid") | |
| bubble.pack(anchor="e" if sender=="user" else "w", pady=5, padx=5) | |
| self.canvas.update_idletasks() | |
| self.canvas.yview_moveto(1.0) | |
| def animate_bot_response(self, text, idx=0, message=""): | |
| if idx < len(text): | |
| message += text[idx] | |
| if hasattr(self, "bot_bubble"): | |
| self.bot_bubble.config(text=message) | |
| else: | |
| self.bot_bubble = Label(self.scrollable_frame, text=message, wraplength=300, justify="left", | |
| bg="#FFFFFF", fg="#000000", font=("Helvetica", 12), padx=10, pady=5, bd=1, relief="solid") | |
| self.bot_bubble.pack(anchor="w", pady=5, padx=5) | |
| idx += 1 | |
| self.root.after(30, self.animate_bot_response, text, idx, message) | |
| else: | |
| del self.bot_bubble | |
| self.canvas.update_idletasks() | |
| self.canvas.yview_moveto(1.0) | |
| if __name__ == "__main__": | |
| root = tk.Tk() | |
| app = ChatbotGUI(root) | |
| root.mainloop() | |