From eb5ac055ca256f13b274269dd731f879f3fb7c96 Mon Sep 17 00:00:00 2001
From: gooneybird47 <67790879+gooneybird47@users.noreply.github.com>
Date: Mon, 28 Dec 2020 20:22:43 +0000
Subject: [PATCH] Create Traffic_Creator.py
Simple AI traffic creator for FlightGear
My first Python program.
---
Traffic_Creator.py | 444 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 444 insertions(+)
create mode 100644 Traffic_Creator.py
diff --git a/Traffic_Creator.py b/Traffic_Creator.py
new file mode 100644
index 0000000..68bad07
--- /dev/null
+++ b/Traffic_Creator.py
@@ -0,0 +1,444 @@
+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', 10, 'bold'))
+returnflight_label.grid(row=12, column=4, 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()