Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.01 KB | None | 0 0
  1. import requests
  2. from tkinter.ttk import *
  3. from tkinter import *
  4. from PIL import Image
  5. from PIL import ImageTk
  6. import webbrowser
  7. from tkinter.filedialog import askopenfilenames
  8. import json
  9. global finestra
  10. from firebase import firebase
  11. import datetime
  12. from tkinter import messagebox
  13.  
  14. #--------------------------------------------------------------------------------------------------------------------
  15. #Funzione che consente di accedere al database. Prende in ingresso i seguenti parametri:
  16. # dsn è la destinazione, ovvero il link vero e proprio del database
  17. # la chive segreta
  18. # e-mail per vedere chi sta accedendo in quel momento al database
  19. # admin che di default è messo a false, ovvero chi sta scrivendo non è per forza un admin
  20. def accessdb_fb_auth(dsn,SECRET_KEY, email, admin=False):
  21.  
  22. auth=firebase.FirebaseAuthentication(SECRET_KEY, email, admin, admin) #funzione che serve a creare l'autenticazione
  23. db= firebase.FirebaseApplication(dsn,auth) #accedo al database con l'url "dsn" e l'autorizzazione e istanzio l'oggetto db
  24.  
  25. time=datetime.datetime.now() #acquisisco la data per salvare il login d'accesso al DB
  26. time_log=time.strftime('%d/%m/%Y %H:%M,%S')
  27. timeforpath=time.strftime('%d%m%Y%H%M%S')
  28.  
  29. nameemail=email.split('@')[0]
  30. db.put("/log/log_"+nameemail, "/datetime"+timeforpath+"/time", time_log) #registro l'orario e la data del login
  31. db.put("/log/log_"+nameemail, "/datetime"+timeforpath+"/email", email) #registro l'email nel login
  32. return db #ritorna l'oggetto tramite il quale accediamo al DataBase
  33.  
  34. #Funzione per l'utente PRIVATO
  35. def caricaPrivatoSuDatabase():
  36.  
  37. dsn4=dsnText4.get('1.0','end-1c')
  38. key4=keyText4.get('1.0','end-1c')
  39.  
  40. uid=idUserPriv.get('1.0','end-1c')
  41. code='CAP-'+ idCap.get('1.0','end-1c')
  42. zonesArray=[]
  43.  
  44. db=accessdb_fb_auth('https://' + dsn4, key4,"provaprova@gmail.com",True)
  45. areas=db.get("/Zones/Areas/"+code+"/",None)
  46. for y in areas:
  47. zonesArray.append({"cap":code,"zone":y})
  48.  
  49. db.put("Users/"+uid,"/Areas/",zonesArray)
  50. db.put("Users/"+uid,"Type",'B')
  51.  
  52. #Inseriemnto utente PRIVATO
  53. def utentePrivato():
  54. global idUserPriv, idCap, dsnText4, keyText4
  55.  
  56. script5=Tk() #creazione dello script
  57. script5.configure(background="limegreen")
  58. script5.geometry('400x420')
  59. script5.title("Utente Privato")
  60.  
  61. Label(script5, text="ID UTENTE", width=500, height=1, background="darkgreen",font="Helvetica 12 bold",foreground="white").pack()
  62.  
  63. #Label di separazione tra ID UTENTE e la box nella quale inserire l'identificativo
  64. Label(script5, text="", width=500, height=1, background="limegreen").pack()
  65.  
  66. #Label nella quale inserire l'ID dell'utente privato
  67. idUserPriv=Text(script5, width=23, height=1, font='Helvetica 14') #dimensioni
  68. idUserPriv.pack()
  69.  
  70. #Label di separazione tra la box nella quale inserire l'identificativo e la label CAP
  71. Label(script5, text="", width=500, height=1, background="limegreen").pack()
  72.  
  73. Label(script5, text="CAP", width=500, height=1, background="darkgreen",font="Helvetica 12 bold",foreground="white").pack()
  74. Label(script5, text="", width=500, height=1, background="limegreen").pack()
  75.  
  76. #Label nella quale inserire il CAP dell'utente privato
  77. idCap=Text(script5, width=23, height=1, font='Helvetica 14') #dimensioni
  78. idCap.pack()
  79.  
  80. #Label di separazione tra la box nella quale inserire il CAP e il button Inserisci
  81. Label(script5, text="", width=500, height=1, background="limegreen").pack()
  82.  
  83. #Quando si clicca sul button "Inserisici utente ADMIN" viene invocata la funzione definita sopra
  84. Label(script5, text='Inserire link di destinazione del database',
  85. font='Helvetica 12',
  86. foreground="white",
  87. width=500,
  88. background="darkgreen").pack()
  89.  
  90. Label(script5, text="", width=500, height=1, background="limegreen").pack()
  91.  
  92. dsnText4=Text(script5, width=26, height=1, font='Helvetica 14')
  93. dsnText4.pack()
  94.  
  95. Label(script5, text="", width=500, height=1, background="limegreen").pack()
  96.  
  97. #Creazione della label "Inserisci link di destinazione del database"
  98. Label(script5, text='Inserire la chiave segreta',
  99. font='Helvetica 12',
  100. foreground="white",
  101. width=500,
  102. background="darkgreen").pack()
  103.  
  104. Label(script5, text="", width=500, height=1, background="limegreen").pack()
  105.  
  106. keyText4=Text(script5, width=26, height=1, font='Helvetica 14')
  107. keyText4.pack()
  108.  
  109. Label(script5, text="", width=500, height=1, background="limegreen").pack()
  110.  
  111. Button(script5, text="Inserisci utente PRIVATO", command=caricaPrivatoSuDatabase,
  112. font="Gill 10 bold",
  113. background="skyblue",
  114. foreground="black",
  115. width=30,
  116. height=2,
  117. highlightbackground="forestgreen",
  118. highlightcolor="forestgreen",
  119. relief=GROOVE).pack()
  120.  
  121. #Funzione per l'utente PUBBLICO
  122. def caricaPubblicoSuDatabase():
  123.  
  124. uid=idUserPub.get('1.0','end-1c')
  125. dsn3=dsnText3.get('1.0','end-1c')
  126. key3=keyText3.get('1.0','end-1c')
  127. db=accessdb_fb_auth('https://' + dsn3, key3,"provaprova@gmail.com",True)
  128. db.put("Users/"+uid,"Type",'A')
  129.  
  130. #Inseriemnto utente PUBBLICO
  131. def utentePubblico():
  132.  
  133. global idUserPub, dsnText3, keyText3
  134. script6=Tk() #creazione dello script
  135. script6.configure(background="limegreen")
  136. script6.geometry('400x350')
  137. script6.title("Utente Pubblico")
  138.  
  139. Label(script6, text="ID UTENTE", width=500, height=1, background="darkgreen",font="Helvetica 12 bold",foreground="white").pack()
  140.  
  141. #Label di separazione tra ID UTENTE e la box nella quale inserire l'identificativo
  142. Label(script6, text="", width=500, height=1, background="limegreen").pack()
  143.  
  144. #Label nella quale inserire l'ID dell'utente pubblico
  145. idUserPub=Text(script6, width=23, height=1, font='Helvetica 14') #dimensioni
  146. idUserPub.pack()
  147.  
  148. #Label di separazione tra la label, nella quale inserire l'ID, e il button
  149. Label(script6, text="", width=500, height=1, background="limegreen").pack()
  150.  
  151. #Quando si clicca sul button "Inserisici utente ADMIN" viene invocata la funzione definita sopra
  152. Label(script6, text='Inserire link di destinazione del database',
  153. font='Helvetica 12',
  154. foreground="white",
  155. width=500,
  156. background="darkgreen").pack()
  157.  
  158. Label(script6, text="", width=500, height=1, background="limegreen").pack()
  159.  
  160. dsnText3=Text(script6, width=26, height=1, font='Helvetica 14')
  161. dsnText3.pack()
  162.  
  163. Label(script6, text="", width=500, height=1, background="limegreen").pack()
  164.  
  165. #Creazione della label "Inserisci link di destinazione del database"
  166. Label(script6, text='Inserire la chiave segreta',
  167. font='Helvetica 12',
  168. foreground="white",
  169. width=500,
  170. background="darkgreen").pack()
  171.  
  172. Label(script6, text="", width=500, height=1, background="limegreen").pack()
  173.  
  174. keyText3=Text(script6, width=26, height=1, font='Helvetica 14')
  175. keyText3.pack()
  176.  
  177. Label(script6, text="", width=500, height=1, background="limegreen").pack()
  178.  
  179. #Quando si clicca sul button "Inserisici utente PUBBLICO" viene invocata la funzione definita sopra
  180. Button(script6, text="Inserisci utente PUBBLICO", command=caricaPubblicoSuDatabase,
  181. font="Gill 10 bold",
  182. background="skyblue",
  183. foreground="black",
  184. width=30,
  185. height=2,
  186. highlightbackground="forestgreen",
  187. highlightcolor="forestgreen",
  188. relief=GROOVE).pack()
  189.  
  190.  
  191. #Funzione per l'utente ADMIN
  192. def caricaAdminSuDatabase():
  193.  
  194. uid=idUserAdmin.get('1.0','end-1c')
  195. dsn2=dsnText2.get('1.0','end-1c')
  196. key2=keyText2.get('1.0','end-1c')
  197. db=accessdb_fb_auth('https://' + dsn2, key2,"provaprova@gmail.com",True)
  198. areas=db.get("/Zones/Areas",None)
  199.  
  200. zonesArray=[]
  201. for x in areas:
  202. for y in areas[x]:
  203. zonesArray.append({"cap":x,"zone":y})
  204.  
  205. db.put("Users/"+uid,"/Areas",zonesArray)
  206. db.put("Users/"+uid,"Type","C")
  207.  
  208. #Inserimento utente AMMINISTRATORE
  209. def utenteAdmin():
  210.  
  211. global idUserAdmin, dsnText2, keyText2
  212. script7=Tk() #creazione dello script
  213. script7.configure(background="limegreen")
  214. script7.geometry('400x350')
  215. script7.title("Utente Admin")
  216.  
  217. Label(script7, text="ID UTENTE", width=500, height=1, background="darkgreen",font="Helvetica 12 bold",foreground="white").pack()
  218.  
  219. #Label di separazione tra ID UTENTE e la box nella quale inserire l'identificativo
  220. Label(script7, text="", width=500, height=1, background="limegreen").pack()
  221.  
  222. #Label nella quale inserire l'ID dell'utente amministratore
  223. idUserAdmin=Text(script7, width=23, height=1, font='Helvetica 14') #dimensioni
  224. idUserAdmin.pack()
  225.  
  226. #Label di separazione tra la label, nella quale inserire l'ID, e il button
  227. Label(script7, text="", width=500, height=1, background="limegreen").pack()
  228.  
  229. #Quando si clicca sul button "Inserisici utente ADMIN" viene invocata la funzione definita sopra
  230. Label(script7, text='Inserire link di destinazione del database',
  231. font='Helvetica 12',
  232. foreground="white",
  233. width=500,
  234. background="darkgreen").pack()
  235.  
  236. Label(script7, text="", width=500, height=1, background="limegreen").pack()
  237.  
  238. dsnText2=Text(script7, width=26, height=1, font='Helvetica 14')
  239. dsnText2.pack()
  240.  
  241. Label(script7, text="", width=500, height=1, background="limegreen").pack()
  242.  
  243. #Creazione della label "Inserisci link di destinazione del database"
  244. Label(script7, text='Inserire la chiave segreta',
  245. font='Helvetica 12',
  246. foreground="white",
  247. width=500,
  248. background="darkgreen").pack()
  249.  
  250. Label(script7, text="", width=500, height=1, background="limegreen").pack()
  251.  
  252. keyText2=Text(script7, width=26, height=1, font='Helvetica 14')
  253. keyText2.pack()
  254.  
  255. Label(script7, text="", width=500, height=1, background="limegreen").pack()
  256.  
  257. Button(script7, text="Inserisici utente ADMIN", command=caricaAdminSuDatabase,
  258. font="Gill 10 bold",
  259. background="skyblue",
  260. foreground="black",
  261. width=30,
  262. height=2,
  263. highlightbackground="forestgreen",
  264. highlightcolor="forestgreen",
  265. relief=GROOVE).pack()
  266. script7.mainloop()
  267.  
  268.  
  269. #ULTIMA schermata (a parte) che si apre se si clicca sul button "Inserisci Utente" della prima schermata
  270. def insertUtent():
  271.  
  272. script8=Tk()
  273. script8.configure(background="limegreen")
  274. script8.geometry('400x300')
  275. script8.title("Tipologia di utente")
  276.  
  277. #Creazione della label "Scegli la tipologia dell'utente"
  278. Label(script8, text="SCEGLI LA TIPOLOGIA DI UTENTE", width=500, height=1, background="darkgreen",font="Helvetica 12 bold",foreground="white").pack()
  279.  
  280. #Label di separazione tra il comando "Scegli la tipologia" e "A: Utente pubblico"
  281. Label(script8, text="", width=500, height=1, background="limegreen").pack()
  282.  
  283. #Quando si clicca sul button UTENTE PUBBLICO viene invocata la funzione definita sopra
  284. Button(script8, text="A: Utente PUBBLICO", command=utentePubblico,
  285. font="Gill 10 bold",
  286. background="skyblue",
  287. foreground="black",
  288. width=30,
  289. height=2,
  290. highlightbackground="forestgreen",
  291. highlightcolor="forestgreen",
  292. relief=GROOVE).pack()
  293.  
  294. #Label di separazione tra "A" e "B"
  295. Label(script8, text="", width=500, height=1, background="limegreen").pack()
  296.  
  297. #Quando si clicca sul button UTENTE PRIVATO viene invocata la funzione definita sopra
  298. Button(script8, text="B: Utente PRIVATO", command=utentePrivato,
  299. font="Gill 10 bold",
  300. background="skyblue",
  301. foreground="black",
  302. width=30,
  303. height=2,
  304. highlightbackground="forestgreen",
  305. highlightcolor="forestgreen",
  306. relief=GROOVE).pack()
  307.  
  308. #Label di separazione tra "B" e "C"
  309. Label(script8, text="", width=500, height=1, background="limegreen").pack()
  310.  
  311. #Quando si clicca sul button UTENTE AMMINISTRATORE viene invocata la funzione definita sopra
  312. Button(script8, text="C: Utente ADMIN", command=utenteAdmin,
  313. font="Gill 10 bold",
  314. background="skyblue",
  315. foreground="black",
  316. width=30,
  317. height=2,
  318. highlightbackground="forestgreen",
  319. highlightcolor="forestgreen",
  320. relief=GROOVE).pack()
  321. #--------------------------------------------------------------------------------------------------------------------
  322.  
  323. #Funzione che consente di trasformare le geometry caratterisctiche in feature
  324. def getFeature (data,zonadec):
  325.  
  326. CAP='CAP-'+ cap.get('1.0', 'end-1c')
  327. coord = data["geometries"][0]["coordinates"][0]
  328.  
  329. feature={ }
  330. feature["type"] = "Feature"
  331.  
  332. properties = {}
  333. properties["ID"]= zonadec
  334. properties["CAP"]=CAP
  335.  
  336. feature["properties"] = properties
  337.  
  338. geometry = {}
  339. geometry["type"] = "Polygon"
  340. geometry["coordinates"] = coord
  341.  
  342. feature["geometry"] = geometry
  343.  
  344. return feature
  345.  
  346. #Funzione che consente di trasformare il o i file da "GeometryCollection" a "FeatureCollection"
  347. def saveAll():
  348. global finalName
  349. finalName=nom.get('1.0', 'end-1c') + '.json'
  350. script4.destroy()
  351.  
  352. i=0
  353. numFile=len(filename)
  354. features=[]
  355. while(i<numFile):
  356. with open (filename[i]) as file:
  357. data = json.load(file)
  358. features.append(getFeature(data,i+1))
  359. i=i+1
  360.  
  361. featureCollection={}
  362. featureCollection["type"] = "FeatureCollection"
  363.  
  364. featureCollection["features"] = features
  365.  
  366. featureJson=json.dumps(featureCollection)
  367.  
  368. try:
  369. f = open(finalName, 'w')
  370. f.write(featureJson)
  371. f.close()
  372.  
  373. except:
  374. root = Tk()
  375. root.withdraw()
  376. messagebox.showerror("Errore!", "Salvataggio del file non riuscito")
  377. root.mainloop()
  378.  
  379. #Funzione che consente di selezionare, tramite una finestra del browser, uno o più file .json da convertire in FeatureCollection
  380. #e salvare il tutto in un unico file finale
  381. def converti():
  382. global nom, filename,script4
  383.  
  384. filename=[]
  385. Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing
  386. filename = askopenfilenames() # show an "Open" dialog box and return the path to the selected file
  387. print(filename)
  388.  
  389. script4=Toplevel()
  390. script4.configure(background="limegreen")
  391. script4.geometry('300x350')
  392. script4.title("SAVE ALL")
  393.  
  394. Label( script4, text='Salva con nome',
  395. font='Helvetica 12',
  396. foreground="white",
  397. width=200,
  398. background="darkgreen").pack()
  399.  
  400. nom=Text(script4,width=50, height=1, font='Helvetica 14' )
  401. nom.pack()
  402.  
  403. Label(script4, text="", width=500, height=2, background="limegreen").pack()
  404.  
  405. Button(script4, text="SALVA", command=saveAll,
  406. font="Gill 10 bold",
  407. background="skyblue",
  408. foreground="black",
  409. width=30,
  410. height=2,
  411. highlightbackground="forestgreen",
  412. highlightcolor="forestgreen",
  413. relief=GROOVE).pack()
  414.  
  415. script4.mainloop()
  416.  
  417.  
  418.  
  419.  
  420. #Salvataggio del file su Firebase
  421. def salvaSuFirebase():
  422.  
  423. print(finalName)
  424. with open(finalName) as f:
  425. data = json.load(f)
  426. i=0
  427. zonadec=[]
  428. length=len(filename)
  429. Cap='CAP-'+cap.get('1.0','end-1c')
  430.  
  431. while(i<length):
  432. zonaFeature=data['features'][i] #max 8 --per la zona7 inserisce 6
  433. zonadec= zonaFeature['properties']['ID']
  434.  
  435. #Inserimento
  436. try:
  437. dsn=dsnText.get('1.0','end-1c')
  438. key=keyText.get('1.0','end-1c')
  439. db=accessdb_fb_auth('https://' + dsn, key,"provaprova@gmail.com",True)
  440. db.put('Zones/Areas/'+Cap,'/ZONA-'+str(zonadec).zfill(2),zonaFeature)
  441. print("Inserimento nel database avvenuto con successo")
  442.  
  443. except:
  444. print("Errore nell'inserimento") #Il file non è stato inserito correttamente nel database
  445.  
  446. i=i+1
  447.  
  448.  
  449. def inserDatiFirebase():
  450. global dsnText, keyText
  451.  
  452. script9=Tk() #creazione dello script
  453. script9.configure(background="limegreen")
  454. script9.geometry('350x300')
  455. script9.title("Inserire credenziali database")
  456.  
  457. #Creazione della label "Inserisci link di destinazione del database"
  458. Label(script9, text='Inserire link di destinazione del database',
  459. font='Helvetica 12',
  460. foreground="white",
  461. width=500,
  462. background="darkgreen").pack()
  463.  
  464. Label(script9, text="", width=500, height=1, background="limegreen").pack()
  465.  
  466. dsnText=Text(script9, width=26, height=1, font='Helvetica 14')
  467. dsnText.pack()
  468.  
  469. Label(script9, text="", width=500, height=1, background="limegreen").pack()
  470.  
  471. #Creazione della label "Inserisci link di destinazione del database"
  472. Label(script9, text='Inserire la chiave segreta',
  473. font='Helvetica 12',
  474. foreground="white",
  475. width=500,
  476. background="darkgreen").pack()
  477.  
  478. Label(script9, text="", width=500, height=1, background="limegreen").pack()
  479.  
  480. keyText=Text(script9, width=26, height=1, font='Helvetica 14')
  481. keyText.pack()
  482.  
  483. Label(script9, text="", width=500, height=1, background="limegreen").pack()
  484.  
  485. Button(script9, text="Salva sul database FIREBASE", command=salvaSuFirebase,
  486. font="Gill 10 bold",
  487. background="skyblue",
  488. foreground="black",
  489. width=41,
  490. height=2,
  491. highlightbackground="forestgreen",
  492. highlightcolor="forestgreen",
  493. relief=GROOVE).pack()
  494. script9.mainloop()
  495.  
  496. #TERZA SCHERMATA
  497. def step3():
  498. global cap,script3
  499.  
  500. script3=Toplevel()
  501. script3.configure(background="limegreen")
  502. script3.geometry('300x350')
  503. script3.title("CONVERTI")
  504.  
  505. #Creazione della label "Inserisci CAP"
  506. Label(script3, text='Inserisci CAP',
  507. font='Helvetica 12',
  508. foreground="white",
  509. width=200,
  510. background="darkgreen").pack()
  511.  
  512. #Label nella quale inserire il CAP
  513. cap=Text(script3,width=50, height=1, font='Helvetica 14' )
  514. cap.pack()
  515.  
  516. #Label di separazione tra la barra nella quale inserire il CAP, e il button Converti in FeatureCollection
  517. Label(script3, text="", width=500, height=2, background="limegreen").pack()
  518.  
  519. #Cliccando su questo button viene effettuata la conversione del file in FeatureCollection
  520. Button(script3, text="Converti in FEATURECOLLECTION", command=converti,
  521. font="Gill 10 bold",
  522. background="skyblue",
  523. foreground="black",
  524. width=30,
  525. height=2,
  526. highlightbackground="forestgreen",
  527. highlightcolor="forestgreen",
  528. relief=GROOVE).pack()
  529.  
  530. #Label di separazione tra i due button
  531. Label(script3, text="", width=500, height=1, background="limegreen").pack()
  532.  
  533. #Cliccando su questo button viene effettuato il salvataggio sul database
  534. Button(script3, text="Salva su FIREBASE", command=inserDatiFirebase,
  535. font="Gill 10 bold",
  536. background="skyblue",
  537. foreground="black",
  538. width=30,
  539. height=2,
  540. highlightbackground="forestgreen",
  541. highlightcolor="forestgreen",
  542. relief=GROOVE).pack()
  543.  
  544. script3.mainloop()
  545.  
  546. def richiesta():
  547. nome=name.get('1.0', 'end-1c')+ '.json'
  548. r=requests.get('http://polygons.openstreetmap.fr/get_geojson.py?id='+id+'&params=0')
  549. file=open(nome, 'w')
  550. file.write(r.text)
  551. file.close()
  552. script2.destroy()
  553.  
  554. def salvaNome():
  555.  
  556. global name, script2
  557.  
  558. script2=Toplevel()
  559. script2.configure(background="limegreen")
  560. script2.geometry('300x200')
  561. script2.title("SALVA CON NOME")
  562.  
  563. Label( script2, text='Salva con nome ',
  564. font='Helvetica 12',
  565. foreground="white",
  566. width=200,
  567. background="darkgreen").pack()
  568.  
  569. name=Text(script2,width=50, height=1, font='Helvetica 14')
  570. name.pack()
  571.  
  572. Label(script2, text="", width=500, height=2, background="limegreen").pack()
  573.  
  574. Button(script2, text="SALVA", command=richiesta,
  575. font="Gill 10 bold",
  576. background="skyblue",
  577. foreground="black",
  578. width=30,
  579. height=2,
  580. highlightbackground="forestgreen",
  581. highlightcolor="forestgreen",
  582. relief=GROOVE).pack()
  583.  
  584. script2.mainloop()
  585.  
  586.  
  587. def webBrowser():
  588.  
  589. try:
  590. url='https://nominatim.openstreetmap.org/'
  591. webbrowser.open(url, new=2)
  592. r=requests.get(url)
  593.  
  594. except:
  595. root = Tk()
  596. root.withdraw()
  597. messagebox.showerror("Errore: Impossibile aprire OpenStreetMap", "Connessione ad Internet assente")
  598.  
  599. menu()
  600.  
  601. #SECONDA SCHERMATA + apertura browser su OpenStreetMap
  602. def openStreetMap():
  603. global script, text #script e testBox nella quale inserire l'ID
  604. webBrowser()
  605.  
  606. script=Tk() #creazione dello script
  607. script.configure(background="limegreen")
  608. script.geometry('450x470')
  609. script.title("Inserire ID")
  610.  
  611. #Inserimento logo Sense Square
  612. immagine_tk = ImageTk.PhotoImage(Image.open('Sense Square1.png'))
  613.  
  614. # Creazione della label nella quale inserire l'immagine
  615. Label(script, image=immagine_tk, background="black").pack()
  616.  
  617. #Creazione della label "Inserisci ID"
  618. Label( script, text='Inserisci ID della Città o della circoscrizione desiderata',
  619. font='Helvetica 12',
  620. foreground="white",
  621. width=500,
  622. background="darkgreen").pack()
  623.  
  624. Label(script, text="", width=500, height=1, background="limegreen").pack()
  625.  
  626. text=Text(script, width=26, height=1, font='Helvetica 14')
  627. text.pack()
  628.  
  629. Label(script, text="", width=500, height=1, background="limegreen").pack()
  630.  
  631. Button(script, text="Scarica file GeoJSON", command= step2,
  632. font="Gill 10 bold",
  633. background="skyblue",
  634. foreground="black",
  635. width=30,
  636. height=2,
  637. highlightbackground="forestgreen",
  638. highlightcolor="forestgreen",
  639. relief=GROOVE).pack()
  640.  
  641. Label(script, text="", width=500, height=1, background="limegreen").pack()
  642.  
  643. Button(script, text="Procedi con la conversione", command= step3,
  644. font="Gill 10 bold",
  645. background="skyblue",
  646. foreground="black",
  647. width=30,
  648. height=2,
  649. highlightbackground="forestgreen",
  650. highlightcolor="forestgreen",
  651. relief=GROOVE).pack()
  652.  
  653. script.mainloop()
  654.  
  655. def step1():
  656. finestra.destroy()
  657. openStreetMap()
  658.  
  659. def menu():
  660. # Apertura prima schermata
  661.  
  662. global finestra
  663.  
  664. finestra= Tk()
  665. finestra.configure(background="limegreen")
  666. finestra.geometry('450x430')
  667. finestra.title("Benvenuto in Sense Square")
  668.  
  669. #Inserimento logo Sense Square
  670. immagine_tk = ImageTk.PhotoImage(Image.open('Sense Square1.png'))
  671.  
  672. # Creazione della label nella quale inserire l'immagine
  673. Label(finestra,image=immagine_tk, background="black").pack()
  674.  
  675. #Creazione della label nella quale inserire il testo
  676. Label(finestra, text="", width=500, height=1, background="limegreen", font='Helvetica 14').pack()
  677.  
  678. #Creazione del button "Cerca Città"
  679. Button(finestra, text="CERCA CITTA'", command=step1,
  680. font="Gill 10 bold",
  681. background="skyblue",
  682. foreground="black",
  683. width=30,
  684. height=2,
  685. highlightbackground="forestgreen",
  686. highlightcolor="forestgreen",
  687. relief=GROOVE).pack()
  688.  
  689. #Label di separazione tra i due button
  690. Label(finestra, text="", width=500, height=1, background="limegreen").pack()
  691.  
  692. #Il button "Inserisci Utente" consente di aprire un'ulteriore schermata richiamando la funzione insertUtente
  693. Button(finestra, text="INSERISCI UTENTE", command=insertUtent,
  694. font="Gill 10 bold",
  695. background="skyblue",
  696. foreground="black",
  697. width=30,
  698. height=2,
  699. highlightbackground="forestgreen",
  700. highlightcolor="forestgreen",
  701. relief=GROOVE).pack()
  702.  
  703. finestra.mainloop()
  704.  
  705. def step2():
  706. global id
  707. id=text.get('1.0', 'end-1c')
  708. salvaNome()
  709.  
  710.  
  711. #Quando si clicca su "Cerca Città" viene eseguita questa funzione, che chiude la prima schermata (e apre la seconda schermata)
  712. # e apre openStreetMap sul browser predefinito, invocando così la funzione openStreetMap() definita sopra
  713.  
  714. if __name__=='__main__':
  715. menu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement