I am attempting to get Addresses from a Spreadsheet..Convert those Addresses to Latitude and Longitude..Then Add Markers to those Coordinates on a TkinterMapView Map.
I used openpyxl to make a Workbook:
wB = load_workbook('HoldingCats(1).xlsx')wS = wB.activecolumn_b = wS['B']
Loop through the Workbook and print out Addresses. Setting the cells in "Column B" as function AddressCellB:
column_b = wS['B']for cell in column_b: AddressCellB = cell.value print(AddressCellB)
Which all works fine and prints the addresses out...
But When I attempt to run function AddressCellB in .geocode() to get .address, .latitude, and .longitude...
for cell in column_b: AddressCellB = cell.value print(AddressCellB) loc = Nominatim(user_agent="Jimmy Wilson") getLoc = loc.geocode(AddressCellB, timeout=None)contactName = getLoc.addresslat1 = getLoc.latitudelong1 = getLoc.longitude Marker1 = MAP.set_marker( lat1, long1, contactName)
I get an error:
lat1 = getLoc.latitude ^^^^^^^^^^^^^^^AttributeError: 'NoneType' object has no attribute 'address'
Am I approaching this weird?
Why wont the AddressCellB function return .address, .latitude, .longitude from .geocode()?
Is there a better way to pull the list of Addresses from Spreadsheet, Covert Addresses to Coordinates, and establish a Marker (in tkintermapview) for each Address?
TRACEBACK:
Traceback (most recent call last): File "/Users/jawn/Desktop/EXcel/Excel2Me.py", line 377, in <module> contactName = getLoc.address ^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'address'
DISCUSSED CODE:
wB = load_workbook('HoldingCats(1).xlsx')wS = wB.activecolumn_b = wS['B']for cell in column_b: AddressCellB = cell.value print(AddressCellB) loc = Nominatim(user_agent="Jimmy Wilson") getLoc = loc.geocode(AddressCellB, timeout=None)contactName = getLoc.addresslat1 = getLoc.latitudelong1 = getLoc.longitude Marker1 = MAP.set_marker( lat1, long1, contactName)
FULL CODE:
import customtkinter as ctkimport tkinter as tkfrom tkinter import *from tkinter import ttkfrom tkintermapview import TkinterMapViewfrom PIL import Image, ImageTkfrom CTkSpinbox import *import openpyxlfrom openpyxl.workbook import Workbookfrom openpyxl import load_workbookfrom geopy.geocoders import Nominatimimport googlemapsfrom datetime import datetimeWholeApp = ctk.CTk()WholeApp.title("Locations!")WholeApp.geometry("1400x900")# DEF ##############################################def slide(e): MAP.set_zoom(Map_Slider.get())def mutton(): MAP.set_address(mapEntry.get())def theme_stuff(): passdef load_SetData(): path = "LocationsMM.xlsx" workbook = openpyxl.load_workbook(path) sheet = workbook.active list_values = list(sheet.values) for col_name in list_values[0]: SetTreeView.heading("#1", text="Set") SetTreeView.heading("#2", text="Business") SetTreeView.heading("#3", text="Address") SetTreeView.heading("#4", text="Shoot Date") SetTreeView.heading("#5", text="BG Count") SetTreeView.heading("#6", text="Notes") #SetTreeView.heading(col_name, text=col_name) for value_tuple in list_values[1:]: SetTreeView.insert('', tk.END, values=value_tuple)def load_HolCatData(): path2 = "HoldingCats(1).xlsx" workbook2 = openpyxl.load_workbook(path2) sheet2 = workbook2.active list_values2 = list(sheet2.values) for col_name2 in list_values2[0]: HolCatTreeView.heading("#1", text ="Name") HolCatTreeView.heading("#2", text ="Address") HolCatTreeView.heading("#3", text ="Contact") HolCatTreeView.heading("#4", text ="SQFT") HolCatTreeView.heading("#5", text ="$$$") for value_tuple2 in list_values2[1:]: HolCatTreeView.insert('',tk.END, values = value_tuple2)def calc(): calcRoot = ctk.CTk() calcRoot.title("Something Doesnt Add Up") calcEntry = ctk.CTkEntry(calcRoot, width=150, height=50) calcEntry.grid(row=0, column=0, pady=5, padx=5, columnspan=3) button_1 = ctk.CTkButton(calcRoot, text="1", corner_radius=50 ,width=30, height=30) button_1.grid(row=1, column=0, pady=3, padx=3) button_2 = ctk.CTkButton(calcRoot, text="2", corner_radius=50 ,width=30, height=30) button_2.grid(row=1, column=1, pady=3, padx=3) button_3 = ctk.CTkButton(calcRoot, text="3", corner_radius=50 ,width=30, height=30) button_3.grid(row=1, column=2, pady=3, padx=3) button_4 = ctk.CTkButton(calcRoot, text="4", corner_radius=50 ,width=30, height=30) button_4.grid(row=2, column=0, pady=3, padx=3) button_5 = ctk.CTkButton(calcRoot, text="5", corner_radius=50 ,width=30, height=30) button_5.grid(row=2, column=1, pady=3, padx=3) button_6 = ctk.CTkButton(calcRoot, text="6", corner_radius=50 ,width=30, height=30) button_6.grid(row=2, column=2, pady=3, padx=3) button_7 = ctk.CTkButton(calcRoot, text="7", corner_radius=50 ,width=30, height=30) button_7.grid(row=3, column=0, pady=3, padx=3) button_8 = ctk.CTkButton(calcRoot, text="8", corner_radius=50 ,width=30, height=30) button_8.grid(row=3, column=1, pady=3, padx=3) button_9 = ctk.CTkButton(calcRoot, text="9", corner_radius=50 ,width=30, height=30) button_9.grid(row=3, column=2, pady=3, padx=3) button_E = ctk.CTkButton(calcRoot, text="=", corner_radius=50 ,width=30, height=30) button_E.grid(row=4, column=0, pady=3, padx=3) button_0 = ctk.CTkButton(calcRoot, text="0", corner_radius=50 ,width=30, height=30) button_0.grid(row=4, column=1, pady=3, padx=3) button_S = ctk.CTkButton(calcRoot, text="-", corner_radius=50 ,width=30, height=30) button_S.grid(row=4, column=2, pady=3, padx=3)# LABEL #LocationsLabel = ctk.CTkLabel(WholeApp, text="Locations!", font=("cochin", 55), text_color="white", )LocationsLabel.grid(row=0, column=1, pady=2, padx=2)# THEME COMBO #theme_change = ctk.CTkComboBox(WholeApp, values=["Dark", "Light", "Sports", "Elmo"], command=theme_stuff)theme_change.grid(row=0, column=0, pady=5, padx=5)# Excel Combo #def ExcelFileChoice(): passexcel_combo = ctk.CTkComboBox(WholeApp, values = ["Set", "HolCat"], command=ExcelFileChoice)excel_combo.grid(row=0, column=2, pady=2, padx=2)# TAB FRAME1 ############################################### SEARCH TAB #TabFrame1=ctk.CTkTabview(WholeApp, width=55, height=300, corner_radius=10, border_width=1, segmented_button_selected_color="teal", segmented_button_selected_hover_color="gray", text_color="black" )TabFrame1.grid(row=1, column=0, pady=5, padx=(50,1))Tab_search = TabFrame1.add("Search")SetSearch = ctk.CTkEntry(Tab_search, width=185, placeholder_text="set", font=('cochin', 15), corner_radius=10, border_width=1, )SetSearch.insert(0, "Set")SetSearch.bind("<FocusIn>", lambda e: SetSearch.delete('0', 'end'))SetSearch.grid(row=0, column=0, columnspan=2, pady=3, padx=5)BusinessSearch = ctk.CTkEntry(Tab_search, width=185, placeholder_text=("Address"), font=('cochin', 15), corner_radius=10, border_width=1, )BusinessSearch.insert(0, "Business")BusinessSearch.bind("<FocusIn>", lambda e: BusinessSearch.delete('0', 'end'))BusinessSearch.grid(row=1, column=0, columnspan=2, pady=3, padx=5)AddressSearch = ctk.CTkEntry(Tab_search, width=185, placeholder_text=("Shoot Date"), font=('cochin', 15), corner_radius=10, border_width=1, )AddressSearch.insert(0, "Address")AddressSearch.bind('<FocusIn>', lambda e: AddressSearch.delete('0', 'end'))AddressSearch.grid(row=2, column=0, columnspan=2, pady=3, padx=5)ShootDateSearch = ctk.CTkEntry(Tab_search, width=185, placeholder_text=("Shoot Date"), font=('cochin', 15), corner_radius=10, border_width=1, )ShootDateSearch.insert(0, "Shoot Date")ShootDateSearch.bind('<FocusIn>', lambda e: ShootDateSearch.delete('0', 'end'))ShootDateSearch.grid(row=3, column=0, columnspan=2, pady=3, padx=5)bg_label = ctk.CTkLabel(Tab_search, text=" BG", font=("cochin", 15), text_color="white", )bg_label.grid(row=4, column=0)def print_label(count): print(count)spin_var = ctk.IntVar()BGSearch = CTkSpinbox(Tab_search, font=("cochin", 15), start_value=50, min_value=0, max_value=500, variable=spin_var, command=print_label )BGSearch.grid(row=4, column=1, pady=3, padx=5)NotesSearch = ctk.CTkEntry(Tab_search, width=185, placeholder_text=("Notes"), font=('cochin', 15), corner_radius=10, border_width=1, )NotesSearch.grid(row=5, column=0, columnspan=2, pady=3, padx=5)SearchButton = ctk.CTkButton(Tab_search, font=("cochin",18), text="Search", text_color="black", fg_color="teal", corner_radius=10, width=100, hover_color="black" )SearchButton.grid(row=6, column=0, columnspan=2, pady=(5,5), padx=5)############################################################### ADD TAB #Tab_Add = TabFrame1.add("Add")SetAdd = ctk.CTkEntry(Tab_Add, width=185, placeholder_text=("Set"), font=('cochin', 15), corner_radius=10, border_width=1, )SetAdd.grid(row=0, column=0, pady=3, padx=5)SetAdd.insert(0, "Set")SetAdd.bind("<FocusIn>", lambda e: SetAdd.delete('0', 'end'))AddressAdd = ctk.CTkEntry(Tab_Add, width=185, placeholder_text=("Address"), font=('cochin', 15), corner_radius=10, border_width=1, )AddressAdd.grid(row=1, column=0, pady=3, padx=5)ShootDateAdd = ctk.CTkEntry(Tab_Add, width=185, placeholder_text=("Shoot Date"), font=('cochin', 15), corner_radius=10, border_width=1, )ShootDateAdd.grid(row=2, column=0, pady=3, padx=5)def print_label1(count1): print(count1)spin_var1 = ctk.IntVar()BGAdd = CTkSpinbox(Tab_Add, start_value=50, min_value=0, max_value=500, variable=spin_var1, command=print_label1, font=('cochin', 15), )BGAdd.grid(row=3, column=0, pady=3, padx=5)NotesAdd = ctk.CTkEntry(Tab_Add, width=185, placeholder_text=("Notes"), font=('cochin', 15), corner_radius=10, border_width=1, )NotesAdd.grid(row=4, column=0, pady=3, padx=5)AddButton = ctk.CTkButton(Tab_Add, font=("cochin",18), text="Search", text_color="black", fg_color="teal", corner_radius=10, width=100, hover_color="black" )AddButton.grid(row=5, column=0, pady=(5,5), padx=5)#################################################### TOOLS TAB ######################Tab_Tools = TabFrame1.add("Tools")ButtonCalc = ctk.CTkButton(Tab_Tools, font=("cochin",15), text="Calc", fg_color="teal", corner_radius=10, border_color="black", border_width=1, hover_color="black", command=calc )ButtonCalc.grid(row=0, column=0, pady=5, padx=5)#################################################### EXCEL TAB FRAME ###############################################treeFrame=ctk.CTkTabview(WholeApp, width=800, height=300, corner_radius=10, border_width=1, )treeFrame.grid(row=1, column=1, pady=1, padx=1, columnspan=3)# SET TAB #SetTab = treeFrame.add("Set")SetScroll = ctk.CTkScrollbar(SetTab, button_color="teal", fg_color="black" )SetScroll.pack(side="right", fill="y")cols = ("SET", "BUSINESS", "ADDRESS", "SHOOT DATE", "BG COUNT", "NOTES")SetTreeView = ttk.Treeview(SetScroll, yscrollcommand=SetScroll.set, columns=cols, height=12 )SetTreeView['show'] = 'headings'SetTreeView.column("SET", width=175)SetTreeView.column("BUSINESS", width=250)SetTreeView.column("ADDRESS", width=250)SetTreeView.column("SHOOT DATE", width=150)SetTreeView.column("BG COUNT", width=50)SetTreeView.column("NOTES", width=100)SetTreeView.pack()SetScroll.configure(command=SetTreeView.yview)load_SetData()# HolCat #HolCatTab = treeFrame.add("Holcat")HolCatScroll = ctk.CTkScrollbar(HolCatTab, button_color="teal", fg_color="black" )HolCatScroll.pack(side="right", fill="y")cols2 = ("NAME", "ADDRESS", "CONTACT", "SQFT", "$")HolCatTreeView = ttk.Treeview(HolCatScroll, yscrollcommand=HolCatScroll.set, columns=cols2, height=12 )HolCatTreeView["show"] = 'headings'HolCatTreeView.column("ADDRESS", width=250)HolCatTreeView.column("CONTACT", width=275)HolCatTreeView.column("SQFT", width=100)HolCatTreeView.column("$", width=150)HolCatTreeView.pack()HolCatScroll.configure(command=HolCatTreeView.yview)load_HolCatData()# MAP_FRAME ######################mapEntryFrame=ctk.CTkTabview(WholeApp, width=800, height=200, corner_radius=10, border_width=1, text_color="black", segmented_button_selected_color="teal", segmented_button_selected_hover_color="gray" )mapEntryFrame.grid(row=2, column=0, pady=1, padx=(50,5), columnspan=3, sticky="nsew")TabMap = mapEntryFrame.add("Map")mapEntry = ctk.CTkEntry(TabMap, width=200, placeholder_text="Address", font=("cochin", 13), corner_radius=10, )mapEntry.grid(row=0, column=1, pady=1, padx=5, sticky="nsew")mapButton = ctk.CTkButton(TabMap, text="Search", fg_color="teal", font=("cochin", 13), text_color="black", corner_radius=10, command=mutton, width=100, hover_color="black" )mapButton.grid(row=0, column=0, pady=1, padx=1)MAP = TkinterMapView(TabMap, width=750, height=300, corner_radius=15 )MAP.grid(row=1, column=1, pady=5, padx=5, columnspan=2)MAP.set_address("Manhattan")MAP.set_zoom(12)wB = load_workbook('HoldingCats(1).xlsx')wS = wB.activecolumn_b = wS['B']for cell in column_b: AddressCellB = cell.value print(AddressCellB) loc = Nominatim(user_agent="Jimmy Wilson") getLoc = loc.geocode(AddressCellB)contactName = getLoc.addresslat1 = getLoc.latitudelong1 = getLoc.longitude Marker1 = MAP.set_marker( lat1, long1, contactName)Map_Slider = ctk.CTkSlider(TabMap, from_=4, to=20, orientation=tk.VERTICAL, command=slide, button_color="teal", fg_color="black", progress_color="black", button_hover_color="black" )Map_Slider.grid(row=1, column=0, pady=5, padx=5)TabEntry = mapEntryFrame.add("Entry")ButtonEntry = ctk.CTkButton(TabEntry, width=100, text="Note", font=("cochin", 15), text_color="black", fg_color="teal", corner_radius=10, hover_color="black" )ButtonEntry.grid(row=0, column=0, pady=5, padx=5)TextBoxFrame = ctk.CTkTextbox(TabEntry, width=600, height=200, border_width=1, corner_radius=15, )TextBoxFrame.grid(row=0, column=1, pady=10, padx=10)WholeApp.mainloop()