def populate_window():#............................................................................................... #conn = sqlite3.connect('Flight.db') conn = db.db_connect() if from_airport_global=="all" and to_airport_global=="all": sqlcode = "Select * from Flights WHERE Date >= ?" + " ORDER BY " + sort_by_global + " ASC" cursor = conn.execute(sqlcode, (cal_selected_date,)).fetchall() elif from_airport_global=="all": cursor = conn.execute("SELECT * FROM Flights WHERE To_Airport = ? AND Date >= ? ORDER BY "+sort_by_global+" ASC", (to_airport_global, cal_selected_date)) elif to_airport_global=="all": cursor = conn.execute("SELECT * FROM Flights WHERE From_Airport = ? AND Date >= ? ORDER BY "+sort_by_global+" ASC", (from_airport_global, cal_selected_date)) else: cursor = conn.execute("SELECT * FROM Flights WHERE From_Airport = ? AND To_Airport = ? AND DATE >= ? \ ORDER BY "+sort_by_global+" ASC", (from_airport_global,to_airport_global, cal_selected_date)) content = "" collected_IDs.clear() for row in cursor: collected_IDs.add(row[0]) content = content +"ID:"+ str(row[0]) +" "+ str(row[1]) +" "+ str(row[2]) +" "+ str(row[3]) +" "+ str(row[4]) \ +" "+ str(row[5]) +" "+ str(row[6]) +" "+ str(row[7]) +" "+ str(row[8]) + " " + '\n' conn.close() print(content) print(len(collected_IDs)) return content
def fetch_one_record( flight_numb, label, cancel_Btn ): #.................................................................. #sqlite_file = 'Flight.db' table_name = 'Flights' #conn = sqlite3.connect(sqlite_file) conn = db.db_connect() cursor = conn.cursor() # cursor.execute("SELECT Flight_ID FROM Flights WHERE Flight_ID = ?", (flight_numb,)) cursor.execute("SELECT * FROM Flights WHERE Flight_ID = ?", (flight_numb, )) data = cursor.fetchall() # data=cursor.fetchone() if len(data) == 0: label.config(text="Flight ID: " + str(flight_numb) + " Does Not Exist") else: flight = "Flight ID:" + str(data[0][0]) + " " + str(data[0][2]) + " " time = str(data[0][3]) if time.endswith(':00'): time = time[:-3] flight = flight + time +" "+ "from:"+str(data[0][4]) +" to:"+str(data[0][5]) +" seats:"+str(data[0][6]) \ +" fare:$"+str(data[0][7]) +" status:"+str(data[0][8]) label.config(text=flight) cancel_Btn.config(state='normal') cancel_Btn.config(text="Cancel Flight") btn_visibility_toggle(cancel_Btn, True)
def get_table_colNames():#............................................................................................ #sqlite_file = 'Flight.db' table_name = 'Flights' conn = db.db_connect() c = conn.cursor() c.execute('PRAGMA TABLE_INFO({})'.format(table_name)) # collect names in a list names = [tup[1] for tup in c.fetchall()] conn.close() return names
def populate_airline_admin_gui( comments, welcome_label, user): #...................................................... welcome_label.config(text=str('Welcome ' + user.capitalize() + ' here are ALL existing reservations:')) conn = db.db_connect() collected_IDs.clear() # sqlcode = "SELECT FLIGHTS.FLIGHT_ID, USERNAME, DATE, TIME, FROM_AIRPORT, TO_AIRPORT, STATUS FROM FLIGHTS_BOOKED INNER JOIN FLIGHTS WHERE FLIGHTS_BOOKED.Flight_ID = FLIGHTS.Flight_ID" sqlcode = "SELECT * FROM FLIGHTS INNER JOIN CUST_FLIGHT WHERE CUST_FLIGHT.Flight_ID = FLIGHTS.Flight_ID" cursor = conn.execute(sqlcode).fetchall() comments.delete(1.0, tk.END) content = "" for row in cursor: collected_IDs.add(row[0]) content = content + "ID:" + str(row[0]) + " " + str( row[1]) + " " + str(row[2]) + " " time = str(row[3]) if time.endswith(':00'): time = time[:-3] content = content + time +" "+ str(row[4]) +" "+ str(row[5]) +" "+ str(row[6]) +" "+ str(row[7]) \ +" "+ str(row[8]) +" "+ str(row[9]) +" "+ str(row[11]) + " " + '\n' comments.insert(tk.END, content) # --- Create FLIGHT BUTTON widget --- create_flight_Btn = Button(r_window, width=20, text='Create New Flight', fg=css.color_text, bg=css.color_btn, relief='ridge') create_flight_Btn.config(highlightbackground=css.color_bg_newSession) create_flight_Btn.config(font=("Helvetica", 18, "bold")) create_flight_Btn.config( bd=8, relief='raised') # flat, groove, raised, ridge, solid, or sunken create_flight_Btn.place(x=(css.frame_width + 140) / 2, y=490, anchor='center') create_flight_Btn.config(command=lambda: create_NEW_Flight(user)) conn.close()
def polulate_Inbound( origin ): #............................................................................ #conn = sqlite3.connect('Flight.db') #cursor = conn.execute("SELECT * FROM Flights") conn = db.db_connect() cursor = conn.execute("SELECT * FROM Flights WHERE To_Airport = ?", (origin, )) content = "" for row in cursor: content = content +"ID:"+ str(row[0]) +" "+ str(row[1]) +" "+ str(row[2]) +" "+ str(row[3]) +" "+ str(row[4]) \ +" "+ str(row[5]) +" "+ str(row[6]) +" "+ str(row[7]) +" "+ '\n' conn.close() return content
def populate_window( value ): # ......................................................................................... conn = db.db_connect() sqlcode = "SELECT * FROM FLIGHTS WHERE Airline_Name = ?" cursor = conn.execute(sqlcode, (value, )) content = "" for row in cursor: collected_IDs.add(row[0]) content = content + "ID:" + str(row[0]) + " " + str(row[1]) + " " + str(row[2]) + " " + str( row[3]) + " " + str(row[4]) \ + " " + str(row[5]) + " " + str(row[6]) + " " + str(row[7]) + " " + str( row[8]) + " " + " " + '\n' conn.close() return content
def populate_search_engine_admin_gui( comments, cancelbutton ): #......................................................... conn = db.db_connect() collected_IDs.clear() sqlcode = "SELECT * FROM FLIGHTS INNER JOIN CUST_FLIGHT ON FLIGHTS.FLIGHT_ID = CUST_FLIGHT.Flight_ID WHERE METHOD =?" se = "SEARCH_ENGINE" cursor = conn.execute(sqlcode, (se, )).fetchall() for row in cursor: collected_IDs.add(row[0]) reservations = str(row[0]) + " " + str(row[1]) + " " + str( row[2]) + " " + str(row[3]) + " " + str(row[4]) + " " + str( row[5]) + " " + str(row[6]) + " " + str(row[7]) + " " + str( row[8]) + " " + str(row[9]) + " " + str(row[11]) + '\n' comments.insert(tk.END, reservations) conn.close()
def populate_customer_reservations_gui( comments, username ): #........................................................... conn = db.db_connect() collected_IDs.clear() sqlcode = "SELECT * FROM FLIGHTS INNER JOIN CUST_FLIGHT ON FLIGHTS.Flight_ID = CUST_FLIGHT.Flight_ID WHERE CUST_FLIGHT.USERNAME = ?" cursor = conn.execute(sqlcode, (username, )).fetchall() comments.delete(1.0, tk.END) for row in cursor: collected_IDs.add(row[0]) reservations = str(row[0]) + " " + str(row[1]) + " " + str( row[2]) + " " + str(row[3]) + " " + str(row[4]) + " " + str( row[5]) + " " + str(row[6]) + " " + str(row[7]) + " " + str( row[8]) + " " + str(row[9]) + " " + str(row[11]) + '\n' comments.insert(tk.END, reservations) conn.close() # --- CANCEL FLIGHT BUTTON widget --- cancel_Btn = Button(r_window, width=15, text='Cancel Flight', fg=css.color_text, bg=css.color_btn, relief='ridge') cancel_Btn.config(highlightbackground=css.color_bg_newSession) cancel_Btn.config(font=("Helvetica", 20, "bold")) cancel_Btn.config( bd=8, relief='raised') # flat, groove, raised, ridge, solid, or sunken cancel_Btn.config( command=lambda: btn_click_cancelFlight(cancel_Btn) ) # calls btn_click_saveCurrentDate() when the button is clicked
import DB_UTIL as db #import numpy as np con = db.db_connect() #""" #Here, I simply test the functionality of the DB. Give it a shot db.create_flights('MANEMARS', '3030-30-30', '22:30:30', 'Area51', 'MarsRover', 1, 0, 'ON-TIME') a = db.get_Flights('To_Airport') print(a) #db.queryexec("DELETE FROM Cust_Flight;") #con.commit() #print(db.book_a_flight('paul', 1, 'GUI')) #print(db.book_a_flight('paul', 420, 'SEARCH')) db.cancel_flight_admin(420) #Now check reservations print('\n\n') print(db.get_full_user_reservation('paul')) db.cancel_reservation_passenger('paul', 420) print(db.get_full_user_reservation('paul')) #""" #Lets test my new work here #for i in range(1, 10): #print(db.get_user_reservation('paul')) #flight_from_jfk = db.queryexec("SELECT * FROM Flights WHERE From_Airport = 'KJFK-New York' ORDER BY Airline_Name ASC") #print(flight_from_jfk)
('lufthansa', '2019-12-13', '10:50:00', 'JFK', 'JKT', 150, 500, 'Avail'), ('finnair', '2019-12-19', '05:50:00', 'JFK', 'JKT', 150, 500, 'Avail'), ('aeromexico', '2019-12-18', '02:50:00', 'MAM', 'MEM', 150, 500, 'Avail'), ('quantas', '2019-12-20', '06:50:00', 'MARS', 'JUPITER', 150, 500, 'Avail'), ('british airways', '2019-12-12', '09:50:00', 'HOOVERDAM', 'AREA51', 150, 500, 'Booked') ) """ Perhaps we can figure out a way to create a huge amount of these tuples and store in a file, then choose stuff randomly. We can make this happen, pretty easily. Now, we need to add these to the DB. LETS BEGIN """ import DB_UTIL import randdata as rd conobj = DB_UTIL.db_connect() #Connect to the DB #So now that we're connected, lets start adding things. #for i in range(0, len(customers)): # DB_UTIL.create_customer(conobj, customers[i]) for i in range(0, len(rd.airports)): DB_UTIL.create_airports(rd.airports[i][0], rd.airports[i][1], rd.airports[i][2]) for i in range(0, len(rd.airlines)): DB_UTIL.create_airlines(rd.airlines[i]) for i in range(0, len(rd.flights)): DB_UTIL.create_flights(rd.flights[i][0], rd.flights[i][1], rd.flights[i][2], rd.flights[i][3], rd.flights[i][4], rd.flights[i][5], rd.flights[i][6], rd.flights[i][7])
def init( ): # ....................................................................................................... print(get_table_colNames()) # -- GETTING THE DATE HERE THAT'S ALL with open('entered_data.txt', 'r') as text: # create an output text file for line in text: entry = line items = line.split() entered_day = int(items[0].strip( )) # remove whitespace characters i.e. '\n' at the start/end entered_mon = int(items[1].strip()) entered_year = int(items[2].strip()) date = datetime.datetime(entered_year, entered_mon, entered_day) # year , month , day cal_selected_date = str(date.date()) a_window.title('Airlines') # Main window title x_screen = (a_window.winfo_screenwidth() // 2) - (css.frame_center_W) y_screen = (a_window.winfo_screenheight() // 2) - (css.frame_center_H) width = css.frame_width + 80 a_window.geometry( "{}x{}+{}+{}".format(width, css.frame_hight, x_screen, y_screen)) # Main window size & position a_window.config(bg=css.color_bg_newSession) a_window.resizable(False, False) x = 120 # HERE IS CODE FOR THE IMAGE. USE SUITABLE IMAGE ANG FILENAME HERE PLEASE logo1 = PhotoImage(file='airlines.png') l_logo = Label(a_window, image=logo1, bg=css.color_bg_currentDate) l_logo.image = logo1 l_logo.place(x=width / 2, y=10, anchor='n') a_window.protocol("WM_DELETE_WINDOW", on_closing) # HERE IS THE CODE FOR THE ADMIN BUTTON # --- LOG-IN BUTTON widget --- login_Btn = Button(a_window, width=10, text='admin', fg=css.color_text, bg=css.color_btn) login_Btn.config(highlightbackground=css.color_bg_newSession) login_Btn.config(font=("Helvetica", 15, "bold")) login_Btn.config( bd=8, relief='raised') # flat, groove, raised, ridge, solid, or sunken login_Btn.config(command=btn_click_LogIn ) # calls btn_click_LogIn() when the button is clicked login_Btn.place(x=120, y=26, anchor='center') # HERE IS THE CODE FOR DISPLAY LABEL label_1 = Label(a_window, width=60, text='', fg=css.color_text, bg=css.color_bg_newSession) label_1.place(x=css.frame_center_W, y=128 + x, anchor='center') label_1.config(font=( "Helvetica", 18, "normal")) # normal, bold, roman, italic, underline, and overstrike label_1.config(text=str('AVAILABLE FLIGHTS FOR YOUR SELECTED AIRLINE')) # CONNECT TO DATABASE AND UPDATE THE AIRLINE LIST # conn = sqlite3.connect('Flight.db'); conn = db.db_connect() sqlcode = "SELECT AIRLINENAME FROM AIRLINES" cursor = conn.execute(sqlcode).fetchall() airline_option_List = [] for row in cursor: airline_option_List.append(row[0]) conn.close() variable1 = StringVar(a_window) variable1.set("AIRLINES") # default value from_airport = OptionMenu(a_window, variable1, *airline_option_List, command=from_selection) from_airport.config(font=("Helvetica", 16)) from_airport.config(bg=css.color_bg_newSession, width=15, fg=css.color_text) from_airport.place(x=120, y=52, anchor='center') # --- RESULTS TEXT BOX widget --- global results results = Text(a_window, width=90, height=12, fg=css.color_text, bg=css.color_bg_reservations, yscrollcommand=set()) results.config(font=("Helvetica", 15, "normal")) results.config(state=NORMAL) results.place(x=width / 2, y=244 + x, anchor='center') results.insert(END, "RESULTS HERE") results.configure(state='disabled') # --- ENTER FLIGHT ID widget --- label_2 = Label(a_window, width=20, text='', fg=css.color_text, bg=css.color_bg_newSession) label_2.place(x=css.frame_center_W - 60, y=380 + x, anchor='center') label_2.config(font=( "Helvetica", 20, "normal")) # normal, bold, roman, italic, underline, and overstrike label_2.config(text=str('Enter Flight ID')) # --- FLIGHT ID ENTRY widget --- entry_ID = Entry(a_window, show=None, width=5, bg='#FFFFFF', fg=css.color_placeholder, exportselection=0, justify='center') entry_ID.config(font=("Helvetica", 20, "normal")) entry_ID.bind('<Return>', lambda args: enter_keyboardkKey(entry_ID)) # entry_ID.bind('<KeyRelease>', lambda args: enter_keyboardkKey(entry_ID) ) # for dynamic realtime feedback capture entry_ID.bind("<FocusIn>", lambda args: entry_ID_click(entry_ID)) entry_ID.bind("<FocusOut>", lambda args: entry_ID_check(entry_ID, label_3, book_Btn)) entry_ID.insert(0, '0') entry_ID.place(x=css.frame_center_W + 48, y=380 + x, anchor='center') # alternative to entry_ID.pack() # entry_ID.focus_set() # to automatically focus on the widget at start up # --- SELECTED FLIGHT ID widget --- label_3 = Label(a_window, width=110, text='', fg=css.color_text, bg=css.color_bg_newSession) label_3.place(x=width / 2, y=420 + x, anchor='center') label_3.config(font=( "Helvetica", 16, "normal")) # normal, bold, roman, italic, underline, and overstrike label_3.config(text='') # --- BOOK FLIGHT BUTTON widget --- book_Btn = Button(a_window, width=15, text='Book Flight', fg=css.color_text, bg=css.color_btn, relief='ridge') book_Btn.config(highlightbackground=css.color_bg_newSession) book_Btn.config(font=("Helvetica", 20, "bold")) book_Btn.config( bd=8, relief='raised') # flat, groove, raised, ridge, solid, or sunken book_Btn.config(command=lambda: btn_click_bookFlight(label_3, book_Btn)) # --- LOGGED IN USER LABEL widget --- label_user = Label(a_window, width=15, text='', fg=css.color_text, bg=css.color_bg_newSession) label_user.place(x=width - 140, y=26, anchor='center') label_user.config(font=( "Helvetica", 16, "bold")) # normal, bold, roman, italic, underline, and overstrike label_user.config(text=str("user: " + css.global_user)) btn_visibility_toggle(book_Btn, False)
def init( ): #............................................................................... ap_window.title('Airports') #Main window title x_screen = (ap_window.winfo_screenwidth() // 2) - (css.frame_center_W) y_screen = (ap_window.winfo_screenheight() // 2) - (css.frame_center_H) ap_window.geometry( "{}x{}+{}+{}".format(css.frame_width, css.frame_hight, x_screen, y_screen)) #Main window size & position ap_window.config(bg=css.color_bg_newSession) ap_window.resizable(False, False) x = 120 image = PhotoImage(file='airport.png') l_logo = Label(ap_window, image=image, bg=css.color_bg_currentDate) l_logo.image = image l_logo.place(x=css.frame_center_W, y=15 + x, anchor='center') # --- WELCOME INSTRUCTIONS LABEL widget --- label_1 = Label(ap_window, width=60, text='', fg=css.color_text, bg=css.color_bg_newSession) label_1.place(x=css.frame_center_W, y=170 + x, anchor='center') label_1.config(font=( "Helvetica", 20, "normal")) # normal, bold, roman, italic, underline, and overstrike label_1.config(text=str('Welcome traveler, please select your airport')) # --- SELECT FROM AIRPORT OPTION MENU widget --- #CONNECT TO DATABASE AND UPDATE THE FLIGHT LIST #conn = sqlite3.connect('Flight.db'); conn = db.db_connect() sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS" cursor = conn.execute(sqlcode).fetchall() from_option_List = [] for row in cursor: from_option_List.append(row[0]) conn.close() #from_option_List = ["all", "JFK", "LAG", "LAX", "DC", "DUB", "DFW"] ##### this must be populated from the SQLite3 ##### NEED THIS FUNCTION ################################################ #PLEASE hardcode "all" as the 1st menu option #from_option_List = get_FROM_Airports() ######################################################################### variable1 = StringVar(ap_window) variable1.set("FROM AIRPORT") # default value from_airport = OptionMenu(ap_window, variable1, *from_option_List, command=from_selection) from_airport.config(font=("Helvetica", 17)) from_airport.config(bg=css.color_bg_newSession, width=20, fg=css.color_text) from_airport.place(x=css.frame_center_W - 130, y=208 + x, anchor='center') # --- SELECT TO AIRPORT OPTION MENU widget --- # CONNECT TO DATABASE AND UPDATE THE FLIGHT LIST #conn = sqlite3.connect('Flight.db'); conn = db.db_connect() sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS" cursor = conn.execute(sqlcode).fetchall() to_option_List = [] for row in cursor: to_option_List.append(row[0]) conn.close() #to_option_List = ["all", "JFK", "LAG", "LAX", "DC", "DUB", "DFW"] ##### this must be populated from the SQLite3 ##### NEED THIS FUNCTION ################################################ #PLEASE hardcode "all" as the 1st menu option #to_option_List = get_TO_Airports() ######################################################################### variable2 = StringVar(ap_window) variable2.set("TO AIRPORT") to_airport = OptionMenu(ap_window, variable2, *to_option_List, command=to_selection) to_airport.config(font=("Helvetica", 17)) to_airport.config(bg=css.color_bg_newSession, width=20, fg=css.color_text) to_airport.place(x=css.frame_center_W + 130, y=208 + x, anchor='center') # --- Current Date LABEL widget label_date = Label(ap_window, width=30, text='', fg=css.color_text, bg=css.color_bg_newSession) label_date.place(x=css.frame_center_W, y=610, anchor='center') label_date.config(font=( "Helvetica", 20, "normal")) # normal, bold, roman, italic, underline, and overstrike label_date.config(text=str(css.show_date)) # display the entered date # ------------------------------------------------------- ap_window.protocol("WM_DELETE_WINDOW", on_closing)
def init( admin_name, parent ): #............................................................................................ f_window.title('Create New Flight') #Main window title x_screen = (f_window.winfo_screenwidth() // 2) - (css.frame_center_W) y_screen = (f_window.winfo_screenheight() // 2) - (css.frame_center_H) width = css.frame_width + 140 f_window.geometry( "{}x{}+{}+{}".format(width, css.frame_hight, x_screen, y_screen)) #Main window size & position f_window.config(bg=css.color_bg_newSession) f_window.resizable(False, False) #--- SAVE BUTTON DECLARED HERE save_Btn = tk.Button(f_window, width=20, text='Create Flight', fg=css.color_text, bg=css.color_btn, relief='ridge') save_Btn.config(highlightbackground=css.color_bg_newSession) save_Btn.config(font=("Helvetica", 18, "bold")) save_Btn.config( bd=8, relief='raised') # flat, groove, raised, ridge, solid, or sunken save_Btn.config(command=lambda: btn_click_saveFlight(save_Btn, admin_name)) # --- AIRLINE NAME ENTRY widget --- airline_Name = tk.Entry(f_window, show=None, width=25, bg="#FFFFFF", fg=css.color_placeholder, exportselection=0, justify='center') airline_Name.config(font=("Helvetica", 20, "bold")) airline_Name.bind("<FocusIn>", lambda args: entry_click('Airline Name', airline_Name)) airline_Name.bind( "<FocusOut>", lambda args: entry_check('Airline Name', airline_Name, save_Btn)) airline_Name.insert(0, 'Airline Name') airline_Name.bind('<Return>', lambda args: enter_keyboardkKey(airline_Name)) airline_Name.place(x=width / 2, y=50, anchor='n') # --- FROM AIRPORT widget --- from_Airport = tk.Entry(f_window, show=None, width=25, bg="#FFFFFF", fg=css.color_placeholder, exportselection=0, justify='center') from_Airport.config(font=("Helvetica", 20, "bold")) from_Airport.bind("<FocusIn>", lambda args: entry_click('From Airport', from_Airport)) from_Airport.bind( "<FocusOut>", lambda args: entry_check('From Airport', from_Airport, save_Btn)) from_Airport.insert(0, 'From Airport') from_Airport.bind('<Return>', lambda args: enter_keyboardkKey(from_Airport)) from_Airport.place(x=width / 2, y=100, anchor='n') # --- TO AIRPORT ENTRY widget --- to_Airport = tk.Entry(f_window, show=None, width=25, bg="#FFFFFF", fg=css.color_placeholder, exportselection=0, justify='center') to_Airport.config(font=("Helvetica", 20, "bold")) to_Airport.bind("<FocusIn>", lambda args: entry_click('To Airport', to_Airport)) to_Airport.bind( "<FocusOut>", lambda args: entry_check('To Airport', to_Airport, save_Btn)) to_Airport.insert(0, 'To Airport') to_Airport.bind('<Return>', lambda args: enter_keyboardkKey(to_Airport)) to_Airport.place(x=width / 2, y=150, anchor='n') # --- TIME ENTRY widget --- time_entry = tk.Entry(f_window, show=None, width=25, bg="#FFFFFF", fg=css.color_placeholder, exportselection=0, justify='center') time_entry.config(font=("Helvetica", 20, "bold")) time_entry.bind("<FocusIn>", lambda args: entry_click('Departure Time', time_entry)) time_entry.bind( "<FocusOut>", lambda args: entry_check('Departure Time', time_entry, save_Btn)) time_entry.insert(0, 'Departure Time') time_entry.bind('<Return>', lambda args: enter_keyboardkKey(time_entry)) time_entry.place(x=width / 2, y=200, anchor='n') # --- Day ENTRY widget --- day_entry = tk.Entry(f_window, show=None, width=25, bg="#FFFFFF", fg=css.color_placeholder, exportselection=0, justify='center') day_entry.config(font=("Helvetica", 20, "bold")) day_entry.bind("<FocusIn>", lambda args: entry_click('day', day_entry)) day_entry.bind("<FocusOut>", lambda args: entry_check('day', day_entry, save_Btn)) day_entry.insert(0, 'day') day_entry.bind('<Return>', lambda args: enter_keyboardkKey(day_entry)) day_entry.place(x=width / 2, y=250, anchor='n') # --- Month ENTRY widget --- mon_entry = tk.Entry(f_window, show=None, width=25, bg="#FFFFFF", fg=css.color_placeholder, exportselection=0, justify='center') mon_entry.config(font=("Helvetica", 20, "bold")) mon_entry.bind("<FocusIn>", lambda args: entry_click('mon', mon_entry)) mon_entry.bind("<FocusOut>", lambda args: entry_check('mon', mon_entry, save_Btn)) mon_entry.insert(0, 'month') mon_entry.bind('<Return>', lambda args: enter_keyboardkKey(mon_entry)) mon_entry.place(x=width / 2, y=300, anchor='n') # --- Year ENTRY widget --- year_entry = tk.Entry(f_window, show=None, width=25, bg="#FFFFFF", fg=css.color_placeholder, exportselection=0, justify='center') year_entry.config(font=("Helvetica", 20, "bold")) year_entry.bind("<FocusIn>", lambda args: entry_click('year', year_entry)) year_entry.bind("<FocusOut>", lambda args: entry_check('year', year_entry, save_Btn)) year_entry.insert(0, 'year') year_entry.bind('<Return>', lambda args: enter_keyboardkKey(year_entry)) year_entry.place(x=width / 2, y=350, anchor='n') # --- Fare ENTRY widget --- fare_entry = tk.Entry(f_window, show=None, width=25, bg="#FFFFFF", fg=css.color_placeholder, exportselection=0, justify='center') fare_entry.config(font=("Helvetica", 20, "bold")) fare_entry.bind("<FocusIn>", lambda args: entry_click('Fare', fare_entry)) fare_entry.bind("<FocusOut>", lambda args: entry_check('Fare', fare_entry, save_Btn)) fare_entry.insert(0, 'Fare') fare_entry.bind('<Return>', lambda args: enter_keyboardkKey(fare_entry)) fare_entry.place(x=width / 2, y=400, anchor='n') # --- Capacity ENTRY widget --- capacity_entry = tk.Entry(f_window, show=None, width=25, bg="#FFFFFF", fg=css.color_placeholder, exportselection=0, justify='center') capacity_entry.config(font=("Helvetica", 20, "bold")) capacity_entry.bind("<FocusIn>", lambda args: entry_click('Capacity', capacity_entry)) capacity_entry.bind( "<FocusOut>", lambda args: entry_check('Capacity', capacity_entry, save_Btn)) capacity_entry.insert(0, 'Capacity') capacity_entry.bind('<Return>', lambda args: enter_keyboardkKey(capacity_entry)) capacity_entry.place(x=width / 2, y=450, anchor='n') conn = db.db_connect() sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS" cursor = conn.execute(sqlcode).fetchall() from_option_List = [] for row in cursor: from_option_List.append(row[0]) conn.close() from_option_List.insert(0, 'all') variable1 = tk.StringVar(f_window) variable1.set("FROM") # default value from_airport = tk.OptionMenu(f_window, variable1, *from_option_List, command=from_selection) from_airport.config(font=("Helvetica", 15)) from_airport.config(bg=css.color_bg_newSession, width=12, fg=css.color_text) from_airport.place(x=width / 3 - 100, y=100, anchor='n') conn = db.db_connect() sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS" cursor = conn.execute(sqlcode).fetchall() to_option_List = [] for row in cursor: to_option_List.append(row[0]) conn.close() to_option_List.insert(0, 'all') variable1 = tk.StringVar(f_window) variable1.set("TO") # default value to_airport = tk.OptionMenu(f_window, variable1, *to_option_List, command=to_selection) to_airport.config(font=("Helvetica", 15)) to_airport.config(bg=css.color_bg_newSession, width=12, fg=css.color_text) to_airport.place(x=width / 3 - 100, y=150, anchor='n') conn = db.db_connect() sqlcode = "SELECT AIRLINENAME FROM AIRLINES" cursor = conn.execute(sqlcode).fetchall() airline_option_List = [] for row in cursor: airline_option_List.append(row[0]) conn.close() airline_option_List.insert(0, 'all') variable1 = tk.StringVar(f_window) variable1.set("AIRLINES") # default value from_airport = tk.OptionMenu(f_window, variable1, *airline_option_List, command=airline_selection) from_airport.config(font=("Helvetica", 15)) from_airport.config(bg=css.color_bg_newSession, width=12, fg=css.color_text) from_airport.place(x=width / 3 - 100, y=50, anchor='n') f_window.protocol("WM_DELETE_WINDOW", on_closing)
def init():#.......................................................................................................... #-- GETTING THE DATE HERE THAT'S ALL with open('entered_data.txt', 'r') as text: # create an output text file for line in text: entry = line items = line.split() entered_day = int(items[0].strip()) # remove whitespace characters i.e. '\n' at the start/end entered_mon = int(items[1].strip()) entered_year = int(items[2].strip()) date = datetime.datetime(entered_year, entered_mon, entered_day) # year , month , day cal_selected_date = str(date.date()) # -- MAKING GUI se_window.title('Search Engine') #Main window title x_screen = (se_window.winfo_screenwidth() // 2) - (css.frame_center_W) y_screen = (se_window.winfo_screenheight() // 2) - (css.frame_center_H) - 140 width = css.frame_width + 140 se_window.geometry("{}x{}+{}+{}".format( width , 970 , x_screen , y_screen )) #Main window size & position se_window.config(bg=css.color_bg_newSession) se_window.resizable(False,False) x=120 logo1 = PhotoImage(file = 'se.png') l_logo = Label(se_window, image=logo1, bg=css.color_bg_currentDate) l_logo.image = logo1 l_logo.place(x=width/2, y = 15+x, anchor='center') # --- WELCOME INSTRUCTIONS LABEL widget --- label_1 = Label( se_window , width=60 , text='' , fg=css.color_text , bg=css.color_bg_newSession ) label_1.place( x=width/2 , y=160+x , anchor='center' ) label_1.config( font=( "Helvetica", 20 , "normal" ) ) # normal, bold, roman, italic, underline, and overstrike label_1.config( text=str('Please select the airports and date, then click search') ) # --- SELECT FROM AIRPORT OPTION MENU widget --- #CONNECT TO DATABASE AND UPDATE THE FLIGHT LIST #conn = sqlite3.connect('Flight.db'); conn = db.db_connect() sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS" cursor = conn.execute(sqlcode).fetchall() from_option_List = [] for row in cursor: from_option_List.append(row[0]) conn.close() #from_option_List = ["all", "JFK", "LAG", "LAX", "DC", "DUB", "DFW"] ##### this must be populated from the SQLite3 ##### NEED THIS FUNCTION ################################################ #PLEASE hardcode "all" as the 1st menu option #from_option_List = get_FROM_Airports() ######################################################################### from_option_List.insert(0,'all') variable1 = StringVar(se_window) variable1.set("FROM") # default value from_airport = OptionMenu(se_window, variable1, *from_option_List , command=from_selection ) from_airport.config( font=( "Helvetica", 15 ) ) from_airport.config( bg=css.color_bg_newSession , width=12 , fg=css.color_text) from_airport.place(x=width/3-15, y=200+x, anchor='center') # --- SELECT TO AIRPORT OPTION MENU widget --- # CONNECT TO DATABASE AND UPDATE THE FLIGHT LIST #conn = sqlite3.connect('Flight.db'); conn = db.db_connect() sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS" cursor = conn.execute(sqlcode).fetchall() to_option_List = [] for row in cursor: to_option_List.append(row[0]) conn.close() #to_option_List = ["all", "JFK", "LAG", "LAX", "DC", "DUB", "DFW"] ##### this must be populated from the SQLite3 ##### NEED THIS FUNCTION ################################################ #PLEASE hardcode "all" as the 1st menu option #to_option_List = get_TO_Airports() ######################################################################### to_option_List.insert(0,'all') variable2 = StringVar(se_window) variable2.set("TO") to_airport = OptionMenu(se_window, variable2, *to_option_List , command=to_selection ) to_airport.config( font=( "Helvetica", 15 ) ) to_airport.config( bg=css.color_bg_newSession , width=12 , fg=css.color_text) to_airport.place(x=width/2, y=200+x, anchor='center') # --- SELECT SORTING OPTION MENU widget --- flights_table_names = get_table_colNames() ; sort_option_List = flights_table_names #e.g. sort_option_List = ["Airline_ID", "From_Airport" , "To_Airport" , "Airline" ] variable3 = StringVar(se_window) variable3.set("SORT BY") sort = OptionMenu(se_window, variable3, *sort_option_List , command=sort_selection ) sort.config( font=( "Helvetica", 15 ) ) sort.config( bg=css.color_bg_newSession , width=12 , fg=css.color_text) sort.place(x=width-(width/3)+15, y=200+x, anchor='center') # CALENDAR SECTION .................................................. cal = Calendar(se_window, font="Arial 14", selectmode='day', year=entered_year, month=entered_mon, day=entered_day, showweeknumbers=False, mindate= date) # style = ttk.Style(cal) # style.theme_use('calm') cal.place(x = width/2, y=320+x, anchor='center') results = Text(se_window, width=90, height=10, fg=css.color_text, bg=css.color_bg_reservations, yscrollcommand = set()) results.config(font=("Helvetica", 16, "normal")) results.config(state=NORMAL) results.place(x=width/2, y=575 + x, anchor='center') results.insert(END,"RESULTS WILL PRINT HERE") results.configure(state='disabled') def calendar_select(): global cal_selected_date cal_selected_date = str(cal.selection_get()) print(cal_selected_date) def print_search_results(): # MAKES THE SEARCH RESULTS AND ADDS IT TO THE MAIN GUI WINDOW calendar_select() content = populate_window() results.config(state=NORMAL) results.delete('1.0', END) results.insert(END,content) results.configure(state='disabled') book_Btn.config(text='Book Flight') book_Btn.config(state='normal') # must be active, disabled, or normal # END CALENDAR SECTION ............................................. # --- ENTER FLIGHT ID widget label_2 = Label( se_window , width=20 , text='' , fg=css.color_text , bg=css.color_bg_newSession ) label_2.place( x=(width/2)-60 , y=706+x , anchor='center' ) label_2.config( font=( "Helvetica", 20 , "normal" ) ) # normal, bold, roman, italic, underline, and overstrike label_2.config( text=str('Enter Flight ID') ) # --- FLIGHT ID ENTRY widget --- entry_ID = Entry( se_window, show=None, width=5, bg='#FFFFFF', fg=css.color_placeholder, exportselection=0, justify='center') entry_ID.config( font=( "Helvetica", 20 , "normal" ) ) entry_ID.bind('<Return>', lambda args: enter_keyboardkKey(entry_ID) ) #entry_ID.bind('<KeyRelease>', lambda args: enter_keyboardkKey(entry_ID) ) # for dynamic realtime feedback capture entry_ID.bind("<FocusIn>", lambda args: entry_ID_click( entry_ID)) entry_ID.bind("<FocusOut>", lambda args: entry_ID_check(entry_ID,label_3,book_Btn)) entry_ID.insert(0, '0') entry_ID.place( x=(width/2)+48 , y=705+x , anchor='center') # alternative to entry_ID.pack() #entry_ID.focus_set() # to automatically focus on the widget at start up # --- SELECTED FLIGHT ID widget --- label_3 = Label( se_window , width=85 , text='' , fg=css.color_text , bg=css.color_bg_newSession ) label_3.place( x=width/2 , y=747+x , anchor='center' ) label_3.config( font=( "Helvetica", 16 , "normal" ) ) # normal, bold, roman, italic, underline, and overstrike label_3.config( text='' ) # --- SEARCH BUTTON widget --- searchButton = Button( se_window , width=15, text='SEARCH', fg=css.color_text, bg=css.color_btn ) searchButton.config( highlightbackground=css.color_bg_newSession ) searchButton.config( font=( "Helvetica", 20 , "bold" ) ) searchButton.config( bd=8, relief='raised' ) searchButton.config( command=print_search_results ) searchButton.place( x=width/2 , y=445+x , anchor='center') # --- BOOK FLIGHT BUTTON widget --- book_Btn = Button( se_window , width=15, text='Book Flight', fg=css.color_text, bg=css.color_btn, relief='ridge' ) book_Btn.config( highlightbackground=css.color_bg_newSession ) book_Btn.config( font=( "Helvetica", 20 , "bold" ) ) book_Btn.config( bd=8, relief='raised' ) # flat, groove, raised, ridge, solid, or sunken book_Btn.config( command=lambda: btn_click_bookFlight(label_3,book_Btn) ) #book_Btn.config( command=book) #book_Btn.bind('<Button-1>', hide_me) #book_Btn.place( x=css.frame_center_W , y=785+x , anchor='center') btn_visibility_toggle( book_Btn , False) # --- LOG-IN BUTTON widget --- login_Btn = Button(se_window, width=10, text='admin', fg=css.color_text, bg=css.color_btn) login_Btn.config( highlightbackground=css.color_bg_newSession ) login_Btn.config(font=("Helvetica", 15, "bold")) login_Btn.config(bd=8, relief='raised') # flat, groove, raised, ridge, solid, or sunken login_Btn.config(command=btn_click_LogIn) # calls btn_click_LogIn() when the button is clicked login_Btn.place(x=100, y=26, anchor='center') # --- LOGGED IN USER LABEL widget --- label_user = Label( se_window , width=15 , text='' , fg=css.color_text , bg=css.color_bg_newSession ) label_user.place( x=width-100 , y=26 , anchor='center' ) label_user.config( font=( "Helvetica", 16 , "bold" ) ) # normal, bold, roman, italic, underline, and overstrike label_user.config( text=str("user: "******"WM_DELETE_WINDOW", on_closing)