Coding
16 July 2020
Obtaining list of aircraft from fgfs --show aircraft and displaying in list box. Select is next:
from tkinter import *
import os
os.nice(5)
# June 15, 2020 restarted development : need a complete working software with exe
#this program runs in Python 3 Note for Python 3 in Linux change build environment commands to
# *** python3 -m py_compile "%f" *** and execute command to *** python3 "%f" ***
# From Sept 18, 2011 Version fgwalk25M
# Main window
win = Tk()
win.title("fgw2020_1")
win.geometry("640x480+100+100")
# # ***** NEED TO CHANGE***** First thing this aircraft list should be obtained from system fgfs --show-aircraft
#aircraftlist=["c172p", "dhc2W","j3cub", "Dragonfly", "b1900d", "777-200ER" "SenecaII"]
#print(aircraftlist)
airportlist=["KHAF","KOAK", "KSFO","KHRV"]
#Variables
autocoordvar=IntVar()
a=IntVar()
CheckVar1=StringVar()
cloudvar=StringVar()
turbvar=StringVar()
texturevar=StringVar()
shadingvar=StringVar()
autocoordvar=StringVar()
daytimevar=StringVar()
seasonvar=StringVar()
fogvar=StringVar()
v = StringVar()
fgcommand = StringVar()
aircraftvariable = StringVar()
# Run the fgfs command and get the aircraft info data
#os.system("fgfs --show-aircraft >> fgfsshowaircraft.txt")
AircraftList = open('fgfsshowaircraft.txt', 'r')
aircraftline = AircraftList.readlines()
# # ***** NEED TO CHANGE***** First thing this aircraft list should be obtained from system fgfs --show-aircraft
aircraftcode = aircraftline[3:15]
#print(aircraftline[1])
# Base frame or top frame
top_frame1 = Frame(win)
#Put top frame in grid of win, that is, the parent frame, in row1 col1 (not 0 0)
top_frame1.grid(row=1, column=1)
#Image of One Aircraft only - logo
imgpath1 = "c172p.gif/"
photo1 = PhotoImage(file=imgpath1)
#Create a lableFrame inside the top frame 1 for aircraft
labelframe1 = LabelFrame(top_frame1, text="Choose Aircraft")
#put this lable frame in the grid of top frame
labelframe1.grid(row=1, column=0, padx=16, pady=5)
#Create a lableFrame inside the top frame 1 for airport
labelframe2 = LabelFrame(top_frame1, text="Choose Airport")
#put this lable frame in the grid of top frame
labelframe2.grid(row=1, column=1, padx=16, pady=5)
#Create a lableFrame inside the top frame 1 for airport
labelframe3 = LabelFrame(top_frame1, text="Weather")
#put this lable frame in the grid of top frame
labelframe3.grid(row=2, column=0, padx=16, pady=5, columnspan = 2)
#Create a lableFrame inside the top frame 1
labelframe4 = LabelFrame(top_frame1, text="Graphic Settings")
#put this lable frame in the grid of top frame
labelframe4.grid(row=3, column=0, padx=16, pady=5, columnspan = 4)
#Create a lableFrame inside the top frame 1
labelframe5 = LabelFrame(top_frame1, text="Autocoordination")
#put this lable frame in the grid of top frame
labelframe5.grid(row=4, column=0, padx=16, pady=5)
#Create a lableFrame inside the top frame 1
labelframe6 = LabelFrame(top_frame1, text="Command line:")
#put this lable frame in the grid of top frame
labelframe6.grid(row=5, column=0, padx=16, pady=5, columnspan = 6)
# Aircraft Images label
ImageL1 = Label(labelframe1, image=photo1)
ImageL1.photo = photo1
# Add image to grid. Only one image is needed, it changes according to selected item
ImageL1.grid(row=0, column=0, padx=16, pady=5)
# Define Listbox for aircraft
lb = Listbox(labelframe1, height=7, exportselection=0)
lb.insert(END, )
for item in aircraftline:
#print(item)
lb.insert('end', item)
lb.selection_set(first=0)
#For default scenery so set airport to default airports
# Define Listbox for Airport
AirportList = Listbox(labelframe2, height=8, exportselection=0)
AirportList.insert(END,"PHTO")
AirportList.insert(END,"PHNL")
AirportList.insert(END,"PHMK")
AirportList.insert(END,"PHLI")
AirportList.insert(END,"KHAF")
AirportList.insert(END,"KSFO")
AirportList.insert(END,"KOAK")
AirportList.insert(END,"KHRV")
AirportList.selection_set(first=0)
#Check boxes for selecting season, turbulence, clouds...
CHK_season = Checkbutton(labelframe3, text = "Winter Season", variable =CheckVar1, onvalue = " --season=winter ", offvalue = " ", font=("Helvetica", 11))
CHK_season.deselect()
CHK_turbulence = Checkbutton(labelframe3, text = "Turbulence", variable =turbvar, onvalue = "--turbulence=0.4", offvalue = " ", font=("Helvetica", 11))
CHK_turbulence.select()
CHK_clouds = Checkbutton(labelframe4, text = "Clouds On", variable =cloudvar, onvalue = "", offvalue = " --disable-clouds ", font=("Helvetica", 11))
CHK_clouds.select()
CHK_textures = Checkbutton(labelframe4, text = "Textures on", variable =texturevar, onvalue = "", offvalue = " --disable-textures ", font=("Helvetica", 11))
CHK_textures.select()
CHK_noontime = Checkbutton(labelframe4, text = "Noon Time", variable =daytimevar, onvalue = " --timeofday=noon ", offvalue = " ", font=("Helvetica", 11))
CHK_noontime.select()
CHK_autocoord = Checkbutton(labelframe5, text = "Auto coordination", variable =autocoordvar, onvalue = " --enable-auto-coordination", offvalue = " ", font=("Helvetica", 11))
CHK_autocoord.select()
CHK_fog = Checkbutton(labelframe4, text = "Fog (fastest)", variable =fogvar, onvalue = " --fog-fastest ", offvalue = " --fog-disable ", font=("Helvetica", 11))
CHK_fog .select()
#Define OK Button
b1 = Button(labelframe6 , text="OK")
text = Text(labelframe6, height =4, width =54)
text.grid(row=0, column=0, padx=16, pady=5)
b1.grid(row=0, column=3, padx=16, pady=5)
lb.grid(row=0, column=1, padx=16, pady=5)
AirportList.grid(row=1, column=2, padx=16, pady=5)
# Add check boxes
CHK_season.grid(row=1, column=0, padx=16, pady=5)
CHK_turbulence.grid(row=1, column=1, padx=16, pady=5)
CHK_clouds.grid(row=1, column=1, padx=16, pady=5)
CHK_textures.grid(row=1, column=2, padx=16, pady=5)
CHK_noontime.grid(row=1, column=3, padx=16, pady=5)
CHK_clouds.grid(row=1, column=4, padx=16, pady=5)
CHK_autocoord.grid(row=1, column=5, padx=16, pady=5)
CHK_fog.grid(row=1, column=2, padx=16, pady=5)
# Event for changing image when a item when list box is selected
# To DO automatically obtain gif file
# List box lb is being bound to an event get_list
#Main button and actions that are triggered
def but1() :
print("button 1 pressed")
print(lb.curselection())
print(AirportList.curselection())
# Check variable access
print(CheckVar1.get())
seltext1 = lb.curselection()
a =int(seltext1[0])
seltext2 = AirportList.curselection()
b =int(seltext2[0])
# put this into press button event
#span = "--timeofday=value --season=winter --fog-disable --disable-clouds --disable-textures --shading-flat "
fgcommand="fgfs --aircraft="
fgcommand = fgcommand + aircraftcode[a]
fgcommand = fgcommand +" --airport="
fgcommand = fgcommand + airportlist[b]
fgcommand = fgcommand + CheckVar1.get()
fgcommand = fgcommand + daytimevar.get()
fgcommand = fgcommand + turbvar.get()
fgcommand = fgcommand + cloudvar.get()
fgcommand = fgcommand + seasonvar.get()
fgcommand = fgcommand + texturevar.get()
fgcommand = fgcommand + fogvar.get()
fgcommand = fgcommand + autocoordvar.get()
text.insert(INSERT, fgcommand)
print(fgcommand)
#os.system(fgcommand)
#Configure GUI button to code that runs as but1()
b1.configure(command=but1)
win.mainloop()
Implementing auto reading of aircraft list and populating select boxes with the data. 11 July 2019
11 July 2019
Obtain list of aircraft in text format. It follows the following format:
777-200 Boeing 777-200
777-200ER Boeing 777-200ER
777-200LR Boeing 777-200LR
777-300 Boeing 777-300
777-300ER Boeing 777-300ER
a24 Aeroprakt A 24 Viking
The following code extracts the aircraft name and decription:
aircraftstring= (" 777-200 Boeing 777-200 ")
print(aircraftstring)
x = aircraftstring.split(" ")
print(x)
print(x[1])
print(x[8])
Output:
777-200 Boeing 777-200
['', '777-200', '', '', '', '', '', '', ' Boeing 777-200', '', '']
777-200
Boeing 777-200
#open file for reading
f = open('aircraftlist.txt', 'r')
#Print contents to screen
print f.read()
#Wait for enter key to be pressed
raw_input()
Simulated Output : (File previously generated by copying and pasting output from fgfs --show-aircraft
pt22 Ryan PT 22 (YASim)
pushback Pushback
rallye-MS893 Socata Rallye MS893E
RV-6A RV-6A (YASim)
s11 Fokker S 11
santa Santa Claus (3d cockpit)
SenecaII PA34-200T Seneca II
SenecaII-panelonly PA34-200T Seneca II (no 3d model, 2d panel only)
sopwithCamel Sopwith Camel 1F.1 (uiuc)
sopwithCamel-v1-nl-uiuc Sopwith Camel (larcsim)
sopwithCamel-YASim Sopwith Camel 1F.1 (YASim)
st10 Socata ST10 Diplomate (YASim)
stampe Stampe SV 4 Br
ufo UFO from the 'White Project' of the UNESCO
yak18t Yak 18 T (YASim)
ZF_Navy_free_balloon US Navy ZF free gas balloon
Adding to the code:
#
#open file for reading
f = open('aircraftlist.txt', 'r')
linearray = f.readlines()
x = linearray[1]
print(x)
plane=x.split(' ', 1)
print(plane)
raw_input()
Output
777-200ER Boeing 777 200 ER