import tkinter as tk from tkinter import ttk from tkinter import filedialog from tkinter import messagebox # from tkinter.filedialog import askopenfile import webbrowser # import os import sys tg = ['', '', '', ' ', ' ', ' ', '', ' ', '', ' ', '', ' ', '', ' ', '', ' ', '', ' ', '', ' ', '', ' ', '', ' ', '', ' ', '', ' ', '', ' ', ' ', ' ', '', ' ', '', ' ', ' ', ' ', '', ' ', ' ', '', ' ', ' ', ' ', '' ] # Clear The Output File open("traffic_test.xml", "w").close() root = tk.Tk() root.geometry('1000x768') root.title('AI Traffic File Creator For FlightGear') # Redirect Print To File sys.stdout = open('traffic_test.xml', 'a') # Button click Counters count_aircraft, count_flight = 0, 0 # close window def on_closing(): if messagebox.askokcancel("Quit", "Do you want to quit?"): root.destroy() root.protocol("WM_DELETE_WINDOW", on_closing) # Close output - Save And Exit def close_output(): sys.stdout.close() # ("traffic_test.xml").close # if sys.platform == 'linux2': # subprocess.call(["xdg-open", 'traffic_test.xml']) # else: # os.startfile('traffic_test.xml') with open("traffic_test.xml", 'r+') as finp: outp = finp.read() out_all = '\n' + '\n' + outp + '' # print(out_all) save_traffic = filedialog.asksaveasfile(mode='w', defaultextension='.xml') if save_traffic: traffic_out = out_all save_traffic.write(traffic_out) save_traffic.close() else: pass # print('No File Saved') root.destroy() txt_label = tk.Label(root, text='If you have never created a traffic before or unsure how to please refer to the Wiki\n' 'you can get there by pressing the "Wiki Link" button above.\n\n' 'Fill in all the sections then first press the "Create Aircraft Section" button\n' 'followed by the "Create Flight Section" button, this will create one\n' 'outbound and return flight for one aircraft. More aircraft and flights can be added\n' 'to the file by altering the required details and pressing the aircraft/flight\n' 'buttons again for each set of data before saving the file.\n\n ' 'Any back slashes in the "path to Aircraft" must be replaced by forward slashes.\n\n' 'This program is designed to create small test or local traffic files ' 'and cannot be used to\n' 'edit them, that is best done in a dedicated xml editor \n\n' 'Be warned,If you exit the program without saving all data will be lost.', font=('Arial', 10), bg='powder blue', anchor="w", padx=10, justify='left') txt_label.grid(row=16, rowspan=9, column=0, columnspan=3) # Define Comment def add_comment(): print('') # Define Aircraft def mod(): # model = m1.get() # liv = m2.get() # airl = m3.get() # hport = m4.get() # reqair = m5.get() # actype = m6.get() # ofset = m7.get() # rad = m8.get() # fltype = m9.get() # perclas = m10.get() # regi = m11.get() # heavy = m12.get() print(tg[3]) print(tg[5] + m1.get() + tg[6]) print(tg[7] + m2.get() + tg[8]) print(tg[9] + m3.get() + tg[10]) print(tg[11] + m4.get() + tg[12]) print(tg[13] + m5.get() + tg[14]) print(tg[15] + m6.get() + tg[16]) print(tg[17] + m7.get() + tg[18]) print(tg[19] + m8.get() + tg[20]) print(tg[21] + m9.get() + tg[22]) print(tg[23] + m10.get() + tg[24]) print(tg[25] + m11.get() + tg[26]) print(tg[27] + m12.get() + tg[28]) print(tg[4]) # Count Aircraft Button clicks global count_aircraft count_aircraft = count_aircraft + 1 aircraft_created.configure(text=f'Aircraft Created = {count_aircraft}', font=('Arial', 10)) # Define Flight def flt(): # calsig = f1.get() # reqair = f2.get() # fltrrule = f3.get() # dep_port = f4.get() # dep_time = f5.get() # dep_c_alt = f6.get() # ar_port = f7.get() # ar_time = f8.get() # repeat = f9.get() print(tg[29]) print(tg[31] + f1.get() + tg[32]) print(tg[13] + f2.get() + tg[14]) print(tg[33] + f3.get() + tg[34]) print(tg[35]) print(tg[37] + f4.get() + tg[38]) print(tg[39] + f5.get() + tg[40]) print(tg[36]) print(tg[41] + f6.get() + tg[42]) print(tg[43]) print(tg[37] + f7.get() + tg[38]) print(tg[39] + f8.get() + tg[40]) print(tg[44]) print(tg[45] + f9.get() + tg[46]) print(tg[30]) # Return flight # calsig_r = rf1.get() # reqair_r = rf2.get() # fltrrule_r = rf3.get() # dep_port_r = rf4.get() # dep_time_r = rf5.get() # dep_c_alt_r = rf6.get() # ar_port_r = rf7.get() # ar_time_r = rf8.get() # repeat_r = rf9.get() print(tg[29]) print(tg[31] + rf1.get() + tg[32]) print(tg[13] + rf2.get() + tg[14]) print(tg[33] + rf3.get() + tg[34]) print(tg[35]) print(tg[37] + rf4.get() + tg[38]) print(tg[39] + rf5.get() + tg[40]) print(tg[36]) print(tg[41] + rf6.get() + tg[42]) print(tg[43]) print(tg[37] + rf7.get() + tg[38]) print(tg[39] + rf8.get() + tg[40]) print(tg[44]) print(tg[45] + rf9.get() + tg[46]) print(tg[30]) # Count Flight Button clicks global count_flight count_flight = count_flight + 1 flights_created.configure(text=f'Flights Created = {count_flight}', font=('Arial', 10)) # text variables # Required Aircraft Insert rqf = tk.StringVar() # Insert Departure port from Arrival For Return Flight port = tk.StringVar() # Add Comment comment_label = tk.Label(root, text='Comment', font=('Arial', 12, 'bold'), width='20', fg='blue') comment_label.grid(row=1, column=2) comment = tk.Entry(root, font=('Arial', 10)) comment.grid(row=3, column=2, padx=5, pady=5) comment_button = tk.Button(root, font=('Arial', 10), text='Add Comment', command=add_comment) comment_button.grid(row=4, column=2) # Set up Aircraft Selection Aircraft_label = tk.Label(root, text='Aircraft Selection', font=('Arial', 12, 'bold'), width='20', fg='blue') Aircraft_label.grid(row=1, column=1) m1_label = tk.Label(root, text='Path To Aircraft File', font=('Arial', 10), width='20', anchor="e") m1_label.grid(row=3, column=0) m1 = tk.Entry(root, font=('Arial', 10)) m1.insert(0, "Aircraft/") m1.grid(row=3, column=1, padx=5, pady=5) m2_label = tk.Label(root, text='Airline Livery', font=('Arial', 10), width='20', anchor="e") m2_label.grid(row=4, column=0) m2 = tk.Entry(root, font=('Arial', 10)) m2.grid(row=4, column=1, padx=5, pady=5) m3_label = tk.Label(root, text='Airline Code', font=('Arial', 10), width='20', anchor="e") m3_label.grid(row=5, column=0) m3 = tk.Entry(root, font=('Arial', 10)) m3.grid(row=5, column=1, padx=5, pady=5) m4_label = tk.Label(root, text='Home Port', font=('Arial', 10), width='20', anchor="e") m4_label.grid(row=6, column=0) m4 = tk.Entry(root, font=('Arial', 10)) m4.grid(row=6, column=1, padx=5, pady=5) m5_label = tk.Label(root, text='Required Aircraft', font=('Arial', 10), width='20', anchor="e") m5_label.grid(row=7, column=0) m5 = tk.Entry(root, textvariable=rqf, font=('Arial', 10)) m5.grid(row=7, column=1, padx=5, pady=5) m6_label = tk.Label(root, text='Aircraft Type', font=('Arial', 10), width='20', anchor="e") m6_label.grid(row=8, column=0) m6 = tk.Entry(root, font=('Arial', 10)) m6.grid(row=8, column=1, padx=5, pady=5) m7_label = tk.Label(root, text='Offset', font=('Arial', 10), width='20', anchor="e") m7_label.grid(row=9, column=0) m7 = tk.Entry(root, font=('Arial', 10)) m7.insert(0, "0") m7.grid(row=9, column=1, padx=5, pady=5) m8_label = tk.Label(root, text='Radius', font=('Arial', 10), width='20', anchor="e") m8_label.grid(row=10, column=0) m8 = tk.Entry(root, font=('Arial', 10)) m8.grid(row=10, column=1, padx=5, pady=5) m9_label = tk.Label(root, text='Flight Type', font=('Arial', 10), width='20', anchor="e") m9_label.grid(row=11, column=0) m9 = ttk.Combobox(root, font=('Arial', 10), values=['ga', 'cargo', 'gate', 'mil-fighter', 'mil-cargo']) m9.grid(row=11, column=1, padx=5, pady=5) m9.current(0) m10_label = tk.Label(root, text='Performance Class', font=('Arial', 10), width='20', anchor="e") m10_label.grid(row=12, column=0) m10 = ttk.Combobox(font=('Arial', 10), values=['light_aircraft', 'turboprop_transport', 'jet_transport', 'heavy_jet', 'ww2_fighter', 'jet_fighter', 'tanker', 'ufo']) m10.grid(row=12, column=1, padx=5, pady=10) m10.current(0) m11_label = tk.Label(root, text='Registration', font=('Arial', 10), width='20', anchor="e") m11_label.grid(row=13, column=0) m11 = tk.Entry(root, font=('Arial', 10)) m11.grid(row=13, column=1, padx=5, pady=5) m12_label = tk.Label(root, text='Heavy Aircraft', font=('Arial', 10), width='20', anchor="e") m12_label.grid(row=14, column=0) m12 = ttk.Combobox(font=('Arial', 10), values=['false', 'true']) m12.grid(row=14, column=1, padx=5, pady=5) m12.current(0) # Create Aircraft section button but_e1 = tk.Button(root, font=('Arial', 10), text='1 - Create Aircraft section', command=mod) but_e1.grid(row=6, column=2) # Set Up Flight flight_label = tk.Label(root, text='Flight Selection', font=('Arial', 12, 'bold'), width='20', fg='blue') flight_label.grid(row=1, column=5) f1_label = tk.Label(root, text='Call Sign', font=('Arial', 10), width='20', anchor="e") f1_label.grid(row=3, column=4) f1 = tk.Entry(root, font=('Arial', 10)) f1.grid(row=3, column=5, padx=5, pady=5) f2_label = tk.Label(root, text='Required Aircraft', font=('Arial', 10), width='20', anchor="e") f2_label.grid(row=4, column=4) f2 = tk.Entry(root, textvariable=rqf, font=('Arial', 10)) f2.grid(row=4, column=5, padx=5, pady=5) f3_label = tk.Label(root, text='Flight Rules', font=('Arial', 10), width='20', anchor="e") f3_label.grid(row=5, column=4) f3 = ttk.Combobox(root, font=('Arial', 10), values=['IFR', 'VFR']) f3.grid(row=5, column=5, padx=5, pady=5) f3.current(0) f4_label = tk.Label(root, text='Departure Port', font=('Arial', 10), width='20', anchor="e") f4_label.grid(row=6, column=4) f4 = tk.Entry(root, font=('Arial', 10)) f4.grid(row=6, column=5, padx=5, pady=5) f5_label = tk.Label(root, text='Departure Time', font=('Arial', 10), width='20', anchor="e") f5_label.grid(row=7, column=4) f5 = tk.Entry(root, font=('Arial', 10)) f5.grid(row=7, column=5, padx=5, pady=5) f6_label = tk.Label(root, text='Cruise Altitude', font=('Arial', 10), width='20', anchor="e") f6_label.grid(row=8, column=4) f6 = tk.Entry(root, font=('Arial', 10)) f6.grid(row=8, column=5, padx=5, pady=5) f7_label = tk.Label(root, text='Arrival Port', font=('Arial', 10), width='20', anchor="e") f7_label.grid(row=9, column=4) f7 = tk.Entry(root, textvariable=port, font=('Arial', 10)) f7.grid(row=9, column=5, padx=5, pady=5) f8_label = tk.Label(root, text='Arrival Time', font=('Arial', 10), width='20', anchor="e") f8_label.grid(row=10, column=4) f8 = tk.Entry(root, font=('Arial', 10)) f8.grid(row=10, column=5, padx=5, pady=5) f9_label = tk.Label(root, text='Repeat', font=('Arial', 10), width='20', anchor="e") f9_label.grid(row=11, column=4) f9 = tk.Entry(root, font=('Arial', 10)) f9.grid(row=11, column=5, padx=5, pady=5) # Return Flight returnflight_label = tk.Label(root, text='Return Flight', font=('Arial', 11, 'bold'), width='20', fg='blue') returnflight_label.grid(row=12, column=5, columnspan=2, padx=5, pady=5) rf1_label = tk.Label(root, text='Call Sign', font=('Arial', 10), width='20', anchor="e") rf1_label.grid(row=13, column=4) rf1 = tk.Entry(root, font=('Arial', 10)) rf1.grid(row=13, column=5, padx=5, pady=5) rf2_label = tk.Label(root, text='Required Aircraft', font=('Arial', 10), width='20', anchor="e") rf2_label.grid(row=14, column=4) rf2 = tk.Entry(root, textvariable=rqf, font=('Arial', 10)) rf2.grid(row=14, column=5, padx=5, pady=5) rf3_label = tk.Label(root, text='Flight Rules', font=('Arial', 10), width='20', anchor="e") rf3_label.grid(row=15, column=4) rf3 = ttk.Combobox(root, font=('Arial', 10), values=['IFR', 'VFR']) rf3.grid(row=15, column=5, padx=5, pady=5) rf3.current(0) rf4_label = tk.Label(root, text='Departure Port', font=('Arial', 10), width='20', anchor="e") rf4_label.grid(row=16, column=4) rf4 = tk.Entry(root, textvariable=port, font=('Arial', 10)) rf4.grid(row=16, column=5, padx=5, pady=5) rf5_label = tk.Label(root, text='Departure Time', font=('Arial', 10), width='20', anchor="e") rf5_label.grid(row=17, column=4) rf5 = tk.Entry(root, font=('Arial', 10)) rf5.grid(row=17, column=5, padx=5, pady=5) rf6_label = tk.Label(root, text='Cruise Altitude', font=('Arial', 10), width='20', anchor="e") rf6_label.grid(row=18, column=4) rf6 = tk.Entry(root, font=('Arial', 10)) rf6.grid(row=18, column=5, padx=5, pady=5) rf7_label = tk.Label(root, text='Arrival Port', font=('Arial', 10), width='20', anchor="e") rf7_label.grid(row=19, column=4) rf7 = tk.Entry(root, font=('Arial', 10)) rf7.grid(row=19, column=5, padx=5, pady=5) rf8_label = tk.Label(root, text='Arrival Time', font=('Arial', 10), width='20', anchor="e") rf8_label.grid(row=20, column=4) rf8 = tk.Entry(root, font=('Arial', 10)) rf8.grid(row=20, column=5, padx=5, pady=5) rf9_label = tk.Label(root, text='Repeat', font=('Arial', 10), width='20', anchor="e") rf9_label.grid(row=21, column=4) rf9 = tk.Entry(root, font=('Arial', 10)) rf9.grid(row=21, column=5, padx=5, pady=5) # Create Flight Section but_e2 = tk.Button(root, font=('Arial', 10), text='2 - Create Flight section', command=flt) but_e2.grid(row=9, column=2) # Status Bar - Number Of Aircraft and Flights created aircraft_created = tk.Label(root, fg='red') aircraft_created.grid(row=7, column=2) flights_created = tk.Label(root, fg='red') flights_created.grid(row=10, column=2) # Wiki Link new = 1 wiki_url = 'http://wiki.flightgear.org/AI_Traffic' def openweb(): webbrowser.open(wiki_url, new=new) but_wiki = tk.Button(root, font=('Arial', 10), text='Wiki Link', command=openweb) but_wiki.grid(row=12, column=2) # Close Button but_close = tk.Button(root, text='Save And Exit', command=close_output) but_close.grid(row=14, column=2) root.mainloop()