Spaces:
Build error
Build error
| import tkinter as tk | |
| from tkinter import ttk | |
| import pandas as pd | |
| class AirportSearchApp: | |
| def __init__(self, root, csv_file): | |
| self.root = root | |
| self.root.title("Airport Search") | |
| self.df = pd.read_csv(csv_file) | |
| self.iata_index = {row['IATA']: row['Airport_Name'] for idx, row in self.df.iterrows()} | |
| self.name_index = {row['Airport_Name'].lower(): row['IATA'] for idx, row in self.df.iterrows()} | |
| self.trie = self.build_trie() | |
| self.create_widgets() | |
| def build_trie(self): | |
| trie = {} | |
| for _, row in self.df.iterrows(): | |
| node = trie | |
| for char in row['Airport_Name'].lower(): | |
| node = node.setdefault(char, {}) | |
| node['_end_'] = row['Airport_Name'] | |
| return trie | |
| def search_iata(self, iata): | |
| return self.iata_index.get(iata.upper(), "Airport not found") | |
| def search_name(self, prefix): | |
| node = self.trie | |
| for char in prefix.lower(): | |
| if char not in node: | |
| return [] | |
| node = node[char] | |
| return self.find_airports(node) | |
| def find_airports(self, node, prefix='', results=None): | |
| if results is None: | |
| results = [] | |
| if '_end_' in node: | |
| results.append(node['_end_']) | |
| for char, next_node in node.items(): | |
| if char != '_end_': | |
| self.find_airports(next_node, prefix + char, results) | |
| return results | |
| def autocomplete(self, prefix, max_results=5): | |
| results = self.search_name(prefix) | |
| return results[:max_results] | |
| def create_widgets(self): | |
| self.label = tk.Label(self.root, text="Enter Airport Name or IATA Code:") | |
| self.label.pack(pady=10) | |
| self.entry = ttk.Entry(self.root, width=50) | |
| self.entry.pack(pady=10) | |
| self.entry.bind('<KeyRelease>', self.on_key_release) | |
| self.listbox = tk.Listbox(self.root, width=50, height=10) | |
| self.listbox.pack(pady=10) | |
| self.listbox.bind('<<ListboxSelect>>', self.on_select) | |
| self.result_label = tk.Label(self.root, text="") | |
| self.result_label.pack(pady=10) | |
| def on_key_release(self, event): | |
| input_text = self.entry.get() | |
| if len(input_text) == 3: | |
| # Likely an IATA code | |
| airport_name = self.search_iata(input_text) | |
| self.result_label.config(text=f"IATA Code: {input_text} -> Airport: {airport_name}") | |
| self.listbox.delete(0, tk.END) | |
| else: | |
| # Autocomplete based on airport name | |
| suggestions = self.autocomplete(input_text) | |
| self.listbox.delete(0, tk.END) | |
| for suggestion in suggestions: | |
| self.listbox.insert(tk.END, f"{suggestion} ({self.name_index[suggestion.lower()]})") | |
| def on_select(self, event): | |
| selected_airport = self.listbox.get(self.listbox.curselection()) | |
| self.result_label.config(text=f"Selected Airport: {selected_airport}") | |
| def main(): | |
| root = tk.Tk() | |
| app = AirportSearchApp(root, 'airport.csv') | |
| root.mainloop() | |
| if __name__ == "__main__": | |
| main() | |