souvik0306's picture
initial commit
a7db64a
raw
history blame
3.13 kB
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()