Spaces:
Build error
Build error
| import tkinter as tk | |
| from tkinter import scrolledtext, messagebox | |
| import json | |
| import os | |
| from datetime import datetime | |
| class ChatApplication: | |
| def __init__(self, root): | |
| self.root = root | |
| self.root.title("Chat Interface") | |
| self.root.geometry("600x500") | |
| self.root.configure(bg="#f0f0f0") | |
| self.message_history = [] | |
| self.history_file = "chat_history.json" | |
| self.load_chat_history() | |
| self.create_widgets() | |
| def create_widgets(self): | |
| # Main frame | |
| main_frame = tk.Frame(self.root, bg="#f0f0f0") | |
| main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) | |
| # Chat display area | |
| self.chat_display = scrolledtext.ScrolledText( | |
| main_frame, | |
| wrap=tk.WORD, | |
| width=60, | |
| height=20, | |
| font=("Arial", 10), | |
| state=tk.DISABLED | |
| ) | |
| self.chat_display.pack(fill=tk.BOTH, expand=True, pady=(0, 10)) | |
| # Input frame | |
| input_frame = tk.Frame(main_frame, bg="#f0f0f0") | |
| input_frame.pack(fill=tk.X) | |
| # User input field | |
| self.user_input = tk.Entry( | |
| input_frame, | |
| font=("Arial", 12), | |
| relief=tk.FLAT, | |
| bg="white" | |
| ) | |
| self.user_input.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(0, 5)) | |
| self.user_input.bind("<Return>", self.send_message) | |
| # Send button | |
| send_button = tk.Button( | |
| input_frame, | |
| text="Send", | |
| command=self.send_message, | |
| bg="#4CAF50", | |
| fg="white", | |
| font=("Arial", 10, "bold"), | |
| relief=tk.FLAT, | |
| padx=20 | |
| ) | |
| send_button.pack(side=tk.RIGHT) | |
| # Load existing messages | |
| self.display_messages() | |
| # Focus on input field | |
| self.user_input.focus_set() | |
| def send_message(self, event=None): | |
| message = self.user_input.get().strip() | |
| if not message: | |
| return | |
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
| message_data = { | |
| "timestamp": timestamp, | |
| "message": message, | |
| "sender": "user" | |
| } | |
| self.message_history.append(message_data) | |
| self.display_message(message_data) | |
| self.user_input.delete(0, tk.END) | |
| # Simulate bot response (in real app, this would be your AI/chat logic) | |
| self.simulate_bot_response(message) | |
| self.save_chat_history() | |
| def simulate_bot_response(self, user_message): | |
| # Simple response simulation - replace with actual AI/chat logic | |
| responses = { | |
| "hello": "Hello! How can I help you today?", | |
| "hi": "Hi there! What can I do for you?", | |
| "help": "I'm here to help! What do you need assistance with?", | |
| "bye": "Goodbye! Have a great day!" | |
| } | |
| response = responses.get(user_message.lower(), | |
| f"I received your message: '{user_message}'. How can I assist you further?") | |
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
| response_data = { | |
| "timestamp": timestamp, | |
| "message": response, | |
| "sender": "bot" | |
| } | |
| self.message_history.append(response_data) | |
| self.display_message(response_data) | |
| self.save_chat_history() | |
| def display_message(self, message_data): | |
| self.chat_display.config(state=tk.NORMAL) | |
| # Configure tags for different senders | |
| self.chat_display.tag_configure("user", foreground="blue", justify="right") | |
| self.chat_display.tag_configure("bot", foreground="green", justify="left") | |
| self.chat_display.tag_configure("timestamp", foreground="gray", font=("Arial", 8)) | |
| # Insert message with appropriate formatting | |
| if message_data["sender"] == "user": | |
| self.chat_display.insert(tk.END, f"{message_data['timestamp']}\n", "timestamp") | |
| self.chat_display.insert(tk.END, f"You: {message_data['message']}\n\n", "user") | |
| else: | |
| self.chat_display.insert(tk.END, f"{message_data['timestamp']}\n", "timestamp") | |
| self.chat_display.insert(tk.END, f"Bot: {message_data['message']}\n\n", "bot") | |
| self.chat_display.config(state=tk.DISABLED) | |
| self.chat_display.see(tk.END) | |
| def display_messages(self): | |
| self.chat_display.config(state=tk.NORMAL) | |
| self.chat_display.delete(1.0, tk.END) | |
| for message in self.message_history: | |
| if message["sender"] == "user": | |
| self.chat_display.insert(tk.END, f"{message['timestamp']}\n", "timestamp") | |
| self.chat_display.insert(tk.END, f"You: {message['message']}\n\n", "user") | |
| else: | |
| self.chat_display.insert(tk.END, f"{message['timestamp']}\n", "timestamp") | |
| self.chat_display.insert(tk.END, f"Bot: {message['message']}\n\n", "bot") | |
| self.chat_display.config(state=tk.DISABLED) | |
| self.chat_display.see(tk.END) | |
| def load_chat_history(self): | |
| try: | |
| if os.path.exists(self.history_file): | |
| with open(self.history_file, 'r') as f: | |
| self.message_history = json.load(f) | |
| except (FileNotFoundError, json.JSONDecodeError): | |
| self.message_history = [] | |
| def save_chat_history(self): | |
| try: | |
| with open(self.history_file, 'w') as f: | |
| json.dump(self.message_history, f, indent=2) | |
| except Exception as e: | |
| messagebox.showerror("Error", f"Failed to save chat history: {str(e)}") | |
| def main(): | |
| root = tk.Tk() | |
| app = ChatApplication(root) | |
| root.mainloop() | |
| if __name__ == "__main__": | |
| main() |