Prerequisites : Introduction to Tkinter | Using google distance matrix API
Python offers multiple options for developing GUI (Graphical User Interface). Out of all the GUI methods, tkinter is most commonly used method. It is a standard Python interface to the Tk GUI toolkit shipped with Python. Python with tkinter outputs the fastest and easiest way to create the GUI applications. Creating a GUI using tkinter is an easy task.
To create a tkinter :
- Importing the module – tkinter
- Create the main window (container)
- Add any number of widgets to the main window
- Apply the event Trigger on the widgets.
Let’s create a GUI based Distance-Time calculator using Python Tkinter module, which can tell distance between two city / location and time taken in travelling from one location to another location .
Modules required:
tkinter requests json
Below is the implementation :
# Python3 program to create Distance # Time GUI calculator using Tkinter # import everything from tkinter modules from tkinter import * # import modules import requests, json # Function for finding distance # and duration between two places def result(source, destination, travel_modes): # Enter your API key here api_key = 'Your_api_key' # base variable to store base url # Check travel modes if travel_modes = = "train" : # complete_url variable to store complete url address complete_url = base + 'origins =' + source + \ '&destinations =' + destination + \ '&mode = transit&transit_mode = train' + \ '&key =' + api_key # get method of requests module # return response object r = requests.get(complete_url) else : # complete_url variable to # store complete url address complete_url = base + 'origins =' + source + \ '&destinations =' + destination + \ '&mode =' + travel_modes + '&key =' + api_key # get method of requests module # return response object r = requests.get(complete_url) # json method of response object convert # json format data into python format data x = r.json() # x contains list of nested dictionaries # we know dictionary contains key value pair # Extracting useful information # from x dictionary row = x[ 'rows' ][ 0 ] cell = row[ 'elements' ][ 0 ] # Check value corresponding to # status key in cell dictionary if cell[ 'status' ] = = 'OK' : # insert method inserting the # value in the text entry box. # Extracting useful information # from cell dictionary and inserting # into the respective text fields. distance_field.insert( 10 , cell[ 'distance' ][ 'text' ]) duration_field.insert( 10 , cell[ 'duration' ][ 'text' ]) else : # insert method inserting the # value in the text entry box. # Extract value corresponding to # status key from cell dictionary and # inserting into the respective text fields. mode_field.insert( 10 , cell[ 'status' ]) distance_field.insert( 10 , cell[ 'status' ]) # Function for getting values from # respective text entry boxes and # calling result function . def find() : # get method returns current text # as a string from text entry box source = source_field.get() destination = destination_field.get() travel_modes = mode_field.get() # Calling result() Function result(source, destination, travel_modes) # Function for inserting the train string # in the mode_field text entry box def train() : mode_field.insert( 10 , "train" ) # Function for inserting the driving string # in the mode_field text entry box def driving() : mode_field.insert( 10 , "driving" ) # Function for inserting the walking string # in the mode_field text entry box def walking() : mode_field.insert( 10 , "walking" ) # Function for clearing the contents # of source_field, distance_field, # duration_field text entry boxes. def del_source() : source_field.delete( 0 , END) distance_field.delete( 0 , END) duration_field.delete( 0 , END) # Function for clearing the contents of # destination_field, distance_field, # duration_field text entry boxes. def del_destination() : destination_field.delete( 0 , END) distance_field.delete( 0 , END) duration_field.delete( 0 , END) # function for clearing the contents of mode_field, # distance_field, duration_field text entry boxes. def del_modes() : mode_field.delete( 0 , END) distance_field.delete( 0 , END) duration_field.delete( 0 , END) # Function for clearing the # contents of all text entry boxes def delete_all() : source_field.delete( 0 , END) destination_field.delete( 0 , END) mode_field.delete( 0 , END) distance_field.delete( 0 , END) duration_field.delete( 0 , END) # Driver code if __name__ = = "__main__" : # Create a GUI window root = Tk() # Set the background colour of GUI window root.configure(background = 'light green' ) # Set the configuration of GUI window root.geometry( "500x300" ) # Create a welcome to distance time calculator label headlabel = Label(root, text = 'welcome to distance time calculator' , fg = 'black' , bg = "red" ) # Create a Source: label label1 = Label(root, text = "Source:" , fg = 'black' , bg = 'dark green' ) # Create a Destination: label label2 = Label(root, text = "Destination:" , fg = 'black' , bg = 'dark green' ) # Create a Choose travelling modes: label label3 = Label(root, text = "Choose travelling modes: " , fg = 'black' , bg = 'red' ) # Create a Distance: label label4 = Label(root, text = "Distance:" , fg = 'black' , bg = 'dark green' ) # Create a Duration: label label5 = Label(root, text = "Duration:" , fg = 'black' , bg = 'dark green' ) # grid method is used for placing # the widgets at respective positions # in table like structure . headlabel.grid(row = 0 , column = 1 ) label1.grid(row = 1 , column = 0 , sticky = "E" ) label2.grid(row = 2 , column = 0 , sticky = "E" ) label3.grid(row = 3 , column = 1 ) label4.grid(row = 7 , column = 0 , sticky = "E" ) label5.grid(row = 8 , column = 0 , sticky = "E" ) # Create a text entry box # for filling or typing the information. source_field = Entry(root) destination_field = Entry(root) mode_field = Entry(root) distance_field = Entry(root) duration_field = Entry(root) # grid method is used for placing # the widgets at respective positions # in table like structure . # ipadx keyword argument set width of entry space . source_field.grid(row = 1 , column = 1 , ipadx = "100" ) destination_field.grid(row = 2 , column = 1 , ipadx = "100" ) mode_field.grid(row = 5 , column = 1 , ipadx = "50" ) distance_field.grid(row = 7 , column = 1 , ipadx = "100" ) duration_field.grid(row = 8 , column = 1 , ipadx = "100" ) # Create a CLEAR Button and attached # to del_source function button1 = Button(root, text = "CLEAR" , bg = "red" , fg = "black" , command = del_source) # Create a CLEAR Button and attached to del_destination button2 = Button(root, text = "CLEAR" , bg = "red" , fg = "black" , command = del_destination) # Create a RESULT Button and attached to find function button3 = Button(root, text = "RESULT" , bg = "red" , fg = "black" , command = find) # Create a CLEAR ALL Button and attached to delete_all function button4 = Button(root, text = "CLEAR ALL" , bg = "red" , fg = "black" , command = delete_all) # Create a Train Button and attached to train function button5 = Button(root, text = "Train" , command = train) # Create a Driving Button and attached to driving function button6 = Button(root, text = "Driving" , command = driving) # Create a Walking Button and attached to walking function button7 = Button(root, text = "Walking" , command = walking) # Create a CLEAR Button and attached to del_modes function button8 = Button(root, text = "CLEAR" , fg = "black" , bg = "red" , command = del_modes) # grid method is used for placing # the widgets at respective positions # in table like structure . button1.grid(row = 1 , column = 2 ) button2.grid(row = 2 , column = 2 ) button3.grid(row = 6 , column = 1 ) button4.grid(row = 9 , column = 1 ) button5.grid(row = 4 , column = 0 ) button6.grid(row = 4 , column = 1 ) button7.grid(row = 4 , column = 2 ) button8.grid(row = 5 , column = 2 ) # Start the GUI root.mainloop() |
Output: