Python | Distance-time GUI calculator using Tkinter

21 Nov, 2019
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 – tkinterCreate the main window (container)Add any number of widgets to the main windowApply the event Trigger on the widgets.
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 modulesfrom tkinter import *  # import modulesimport 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    base = 'https://maps.googleapis.com/maps/api/distancematrix/json?'      # 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 boxdef train() :    mode_field.insert(10, "train")  # Function for inserting the driving string# in the mode_field text entry boxdef driving() :    mode_field.insert(10, "driving")  # Function for inserting the walking string# in the mode_field text entry boxdef 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 codeif __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:
shubham_singh
Project
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.