2017-10-06 1 views
10

Je suis nouveau à Tkinter,Créer une application simple à tkinter pour afficher la carte

J'ai un programme qui prend CSV en entrée contenant, géo-localisation du point de vente, affichage sur une carte, enregistrer au format HTML.

Format

de mon csv:

outlet_code Latitude Longitude 
100   22.564  42.48 
200   23.465  41.65 
...  and so on  ... 

Ci-dessous est mon code python pour prendre ce CSV et le mettre sur une carte.

import pandas as pd 
import folium 
map_osm = folium.Map(location=[23.5747,58.1832],tiles='https://korona.geog.uni-heidelberg.de/tiles/roads/x={x}&y={y}&z={z}',attr= 'Imagery from <a href="http://giscience.uni-hd.de/">GIScience Research Group @ University of Heidelberg</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>') 

df = pd.read_excel("path/to/file.csv") 
for index, row in df.iterrows(): 
    folium.Marker(location=[row['Latitude'], row['Longitude']], popup=str(row['outlet_code']),icon=folium.Icon(color='red',icon='location', prefix='ion-ios')).add_to(map_osm) 

map_osm 

Cela prendra affichage map_osm

autre façon est de sauver map_osm en HTML

map_osm.save('path/map_1.html') 

Ce que je cherche est une interface graphique qui fera la même chose.

i.e invite l'utilisateur à entrer le fichier CSV, puis exécute mon code ci-dessous et affiche le résultat ou au moins l'enregistre dans un emplacement.

Toutes les pistes seront utiles

+0

Stackoverflow n'est pas pour fournir des "avancées". Comme écrit cette question est trop large. –

+0

Donc, si je vous comprends bien. Qu'est-ce que vous voulez est un moyen d'avoir une image soit recouverte d'une liste de coordonnées d'un CSV, puis enregistrez-le comme sa propre image? –

+0

@EthanField La bibliothèque folium prend les coordonnées de ma base de données et les trace sur une carte (qui est au format html). – Shubham

Répondre

5

question que vous serait mieux reçue si vous aviez fourni un code que vous avez essayé d'écrire pour la partie graphique de votre question. Je sais (ainsi que tout le monde qui a posté sur vos commentaires) que tkinter est bien documenté et a d'innombrables sites de tutoriels et des vidéos YouTube.

Cependant, si vous avez essayé d'écrire du code en utilisant tkinter et que vous ne comprenez pas ce qui se passe, j'ai écrit un petit exemple de base pour écrire une interface graphique qui ouvrira un fichier et imprime chaque ligne la console.

Ceci ne répondra pas directement à votre question mais vous orientera dans la bonne direction.

Il s'agit d'une version non-OOP qui, à en juger par votre code existant, pourrait vous aider à mieux comprendre.

# importing tkinter as tk to prevent any overlap with built in methods. 
import tkinter as tk 
# filedialog is used in this case to save the file path selected by the user. 
from tkinter import filedialog 

root = tk.Tk() 
file_path = "" 

def open_and_prep(): 
    # global is needed to interact with variables in the global name space 
    global file_path 
    # askopefilename is used to retrieve the file path and file name. 
    file_path = filedialog.askopenfilename() 

def process_open_file(): 
    global file_path 
    # do what you want with the file here. 
    if file_path != "": 
     # opens file from file path and prints each line. 
     with open(file_path,"r") as testr: 
      for line in testr: 
       print (line) 

# create Button that link to methods used to get file path. 
tk.Button(root, text="Open file", command=open_and_prep).pack() 
# create Button that link to methods used to process said file. 
tk.Button(root, text="Print Content", command=process_open_file).pack() 

root.mainloop() 

Avec cet exemple, vous devriez être en mesure de comprendre comment ouvrir votre fichier et le traiter dans un GUI tkinter.

Pour une option plus POO:

import tkinter as tk 
from tkinter import filedialog 

# this class is an instance of a Frame. It is not required to do it this way. 
# this is just my preferred method. 
class ReadFile(tk.Frame): 
    def __init__(self): 
     tk.Frame.__init__(self) 
     # we need to make sure that this instance of tk.Frame is visible. 
     self.pack() 
     # create Button that link to methods used to get file path. 
     tk.Button(self, text="Open file", command=self.open_and_prep).pack() 
     # create Button that link to methods used to process said file. 
     tk.Button(self, text="Print Content", command=self.process_open_file).pack() 

    def open_and_prep(self): 
     # askopefilename is used to retrieve the file path and file name. 
     self.file_path = filedialog.askopenfilename() 

    def process_open_file(self): 
     # do what you want with the file here. 
     if self.file_path != "": 
      # opens file from file path and prints each line. 
      with open(self.file_path,"r") as testr: 
       for line in testr: 
        print (line) 

if __name__ == "__main__": 
    # tkinter requires one use of Tk() to start GUI 
    root = tk.Tk() 
    TestApp = ReadFile() 
    # tkinter requires one use of mainloop() to manage the loop and updates of the GUI 
    root.mainloop()