#!/usr/bin/python
# Copyright (C) 2006 - Giorgio Griffon
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from Tkinter import *
from random import randint
from math import pow,sqrt,acos,pi,cos,sin
import string
nomefile="linee.txt"
nomecodice="codcam.txt"
scl=10#scala, px/mm
c_base=800#dimensioni del riquadro di lavoro
c_altezza=600
lg=2#lato maglia quadrata della griglia [mm]
listapunti=[]#elenco dei punti componenti una linea
elenco_pallini=[]#contiene la lista dei punti colorati che compaiono
elenco_linee=[]
punti_griglia=[]
circonferenza=''
colorepunti="#3460ff"
colorelinee="#ffffff"
coloregriglia="#ffffff"
colorecentri="#ffff00"
rg=3#raggio/semilato pallini
cattura=0#punti catturati ai vertici della griglia o no
n_linee=1
arco_orario=0
arco_antiorario=0
centro_arco=0
raggio=1
xV1=0
yV1=0
xV2=0
yV2=0
angoloiniziale=0
angolofinale=0
def segnapunto(evento):
global arco_orario,arco_antiorario, centro_arco,raggio,xV1,yV1,xV2,yV2,angoloiniziale,angolofinale,circonferenza
x=canvas.canvasx(evento.x)
y=canvas.canvasy(evento.y)
if cattura==1:#snap attivato,sposta il punto sulla griglia
x=lg*scl*round(x/(lg*scl))
y=lg*scl*round(y/(lg*scl))
l=len(listapunti)
if (arco_orario==1 and centro_arco==1):#il punto appena segnato è il centro dell'arco
listapunti.append('centro arco orario')
raggio=sqrt(pow(scl*listapunti[l-2]-x,2)+pow(scl*listapunti[l-1]-y,2))
print 'raggio ='+str(raggio)
xV1=x-raggio#vertici del quadrato circoscritto,servono per definire la circ.
yV1=y-raggio
xV2=x+raggio
yV2=y+raggio
circonferenza=canvas.create_arc(xV1,yV1,xV2,yV2,start=0,extent=359,outline=colorelinee,style="arc")
#elenco_linee.append(circonferenza)
centro_arco=0
print 'indicare il punto finale dell\'arco sulla circonferenza'
print 'se si indica un punto fuori della circonferenza, verrà scelto il punto della circonferenza più vicino a quello indicato'
angoloiniziale=180.0*acos((scl*listapunti[l-2]-x)/raggio)/pi
if (scl*listapunti[l-1]>y):
angoloiniziale=360.0-angoloiniziale
print 'angolo iniziale='+str(angoloiniziale)+'°'
elif (arco_orario==1 and centro_arco==0):
angolofinale=acos((x-scl*listapunti[l-2])/sqrt(pow(x-scl*listapunti[l-2],2)+pow(y-scl*listapunti[l-1],2)))
if (y>scl*listapunti[l-1]):
angolofinale=2*pi-angolofinale
x=scl*listapunti[l-2]+raggio*cos(angolofinale)
y=scl*listapunti[l-1]-raggio*sin(angolofinale)
angolofinale=angolofinale*180.0/pi
print 'angolo finale ='+str(angolofinale)+'°'
ampiezza=angolofinale-angoloiniziale-360.0
print 'ampiezza ='+str(ampiezza)
canvas.delete(circonferenza)
#toglie la circ. provvi e aggiunge l'arco definitivo
circonferenza=canvas.create_arc(xV1,yV1,xV2,yV2,start=angoloiniziale,extent=ampiezza,outline=colorelinee,style="arc")
elenco_linee.append(circonferenza)
arco_orario=0
elif (arco_antiorario==1 and centro_arco==1):#il punto appena segnato è il centro dell'arco
listapunti.append('centro arco antiorario')
raggio=sqrt(pow(scl*listapunti[l-2]-x,2)+pow(scl*listapunti[l-1]-y,2))
print 'raggio ='+str(raggio)
xV1=x-raggio#vertici del quadrato circoscritto,servono per definire la circ.
yV1=y-raggio
xV2=x+raggio
yV2=y+raggio
circonferenza=canvas.create_arc(xV1,yV1,xV2,yV2,start=0,extent=359,outline=colorelinee,style="arc")
#elenco_linee.append(circonferenza)
centro_arco=0
print 'indicare il punto finale dell\'arco sulla circonferenza'
print 'se si indica un punto fuori della circonferenza, verrà scelto il punto della circonferenza più vicino a quello indicato'
angoloiniziale=180.0*acos((scl*listapunti[l-2]-x)/raggio)/pi
if (scl*listapunti[l-1]>y):
angoloiniziale=360.0-angoloiniziale
print 'angolo iniziale='+str(angoloiniziale)+'°'
elif (arco_antiorario==1 and centro_arco==0):
angolofinale=acos((x-scl*listapunti[l-2])/sqrt(pow(x-scl*listapunti[l-2],2)+pow(y-scl*listapunti[l-1],2)))
if (y>scl*listapunti[l-1]):
angolofinale=2*pi-angolofinale
x=scl*listapunti[l-2]+raggio*cos(angolofinale)
y=scl*listapunti[l-1]-raggio*sin(angolofinale)
angolofinale=angolofinale*180.0/pi
print 'angolo finale ='+str(angolofinale)+'°'
if angolofinale>=angoloiniziale:
ampiezza=angolofinale-angoloiniziale
else:
ampiezza=360+angolofinale-angoloiniziale
print 'ampiezza ='+str(ampiezza)
canvas.delete(circonferenza)
#toglie la circ. provvi e aggiunge l'arco definitivo
circonferenza=canvas.create_arc(xV1,yV1,xV2,yV2,start=angoloiniziale,extent=ampiezza,outline=colorelinee,style="arc")
elenco_linee.append(circonferenza)
arco_antiorario=0
else:#si tratta di segmento rettilineo
if l>0:
segmento=canvas.create_line(scl*listapunti[l-2],scl*listapunti[l-1],x,y,fill=colorelinee)
elenco_linee.append(segmento)
listapunti.append(x/scl)
listapunti.append(y/scl)
if (arco_orario==1 or arco_antiorario==1):
pallino=canvas.create_rectangle(x-rg,y-rg,x+rg,y+rg,fill=colorecentri)
else:
pallino=canvas.create_rectangle(x-rg,y-rg,x+rg,y+rg,fill=colorepunti)
elenco_pallini.append(pallino)
print str(x/scl)+' mm - '+str((c_altezza-y)/scl)+' mm'
def chiudilinea(evento):
global listapunti,n_linee
print 'terminata linea con '+str(len(listapunti)/2)+' punti'
if len(listapunti)>0:
f=open(nomefile,'a')
f.write('\n')
l=len(listapunti)
i=0
centroarco=0
while i\n')
centroarco=1
elif listapunti[i]=='centro arco antiorario':
f.write('\n')
centroarco=1
else:
f.write(str(listapunti[i])+'\n')
i=i+1
f.write(str(listapunti[i])+'\n')
if centroarco==1:
f.write('\n')
centroarco=0
i=i+1
f.write('\n')
n_linee=n_linee+1
f.close()
listapunti=[]
def pulizia():
global elenco_pallini,elenco_linee,listapunti,arco_orario,arco_antiorario
#cancella il disegno event. presente e i punti registrati
l=len(elenco_pallini)
i=0
while i'':
if riga[0:6]=='\n':#non interpreta i tag
riga=f.readline()
elif riga=='\n':
pass
elif riga=='\r\n':
pass
elif riga=='\n':
riga=f.readline()
xC=scl*float(riga)
riga=f.readline()
yC=scl*float(riga)
riga=f.readline()#tag chiuso
raggio=sqrt(pow(xC-xv,2)+pow(yC-yv,2))
angoloiniziale=180.0*acos((xv-xC)/raggio)/pi
if (yv>yC):
angoloiniziale=360.0-angoloiniziale
xV1=xC-raggio#vertici del quadrato circoscritto
yV1=yC-raggio
xV2=xC+raggio
yV2=yC+raggio
#legge coord. punto finale
riga=f.readline()
x=scl*float(riga)
riga=f.readline()
y=scl*float(riga)
riga=f.readline()
pallino=canvas.create_rectangle(x-rg,y-rg,x+rg,y+rg,fill=colorepunti)#,outline=colorepunti)
elenco_pallini.append(pallino)
angolofinale=acos((x-xC)/sqrt(pow(x-xC,2)+pow(y-yC,2)))
if (y>yC):
angolofinale=2*pi-angolofinale
angolofinale=angolofinale*180/pi
ampiezza=angolofinale-angoloiniziale-360.0
circonferenza=canvas.create_arc(xV1,yV1,xV2,yV2,start=angoloiniziale,extent=ampiezza,outline=colorelinee,style="arc")
elenco_linee.append(circonferenza)
xv=x
yv=y
nuovalinea=0
elif riga=='\n':
riga=f.readline()
xC=scl*float(riga)
riga=f.readline()
yC=scl*float(riga)
riga=f.readline()#tag chiuso
raggio=sqrt(pow(xC-xv,2)+pow(yC-yv,2))
angoloiniziale=180.0*acos((xv-xC)/raggio)/pi
if (yv>yC):
angoloiniziale=360.0-angoloiniziale
xV1=xC-raggio#vertici del quadrato circoscritto
yV1=yC-raggio
xV2=xC+raggio
yV2=yC+raggio
#legge coord. punto finale
riga=f.readline()
x=scl*float(riga)
riga=f.readline()
y=scl*float(riga)
riga=f.readline()
pallino=canvas.create_rectangle(x-rg,y-rg,x+rg,y+rg,fill=colorepunti)#,outline=colorepunti)
elenco_pallini.append(pallino)
angolofinale=acos((x-xC)/sqrt(pow(x-xC,2)+pow(y-yC,2)))
if (y>yC):
angolofinale=2*pi-angolofinale
angolofinale=angolofinale*180/pi
if angolofinale>=angoloiniziale:
ampiezza=angolofinale-angoloiniziale
else:
ampiezza=360+angolofinale-angoloiniziale
circonferenza=canvas.create_arc(xV1,yV1,xV2,yV2,start=angoloiniziale,extent=ampiezza,outline=colorelinee,style="arc")
elenco_linee.append(circonferenza)
xv=x
yv=y
nuovalinea=0
else:
x=scl*float(riga)
riga=f.readline()
y=scl*float(riga)
riga=f.readline()
pallino=canvas.create_rectangle(x-rg,y-rg,x+rg,y+rg,fill=colorepunti)#,outline=colorepunti)
elenco_pallini.append(pallino)
if nuovalinea==1:
xv=x
yv=y
segmento=canvas.create_line(xv,yv,x,y,fill=colorelinee)
elenco_linee.append(segmento)
xv=x
yv=y
nuovalinea=0
def generacodice():
g=open(nomecodice,'w')
g.write("(codice generato da cammino.py\n(Ing. G. Griffon - Venezia\n")
g.write("[BILLET X200 Y50 Z35\n")#<-INSERIRE QUI LE DIMENSIONI DEL PEZZO
g.write("[TOOLDEF T1 L0 D8\n")#<- INSERIRE QUI LE DIMENSIONI "L" E "D" DEL PRIMO UTENSILE
g.write("N10 G92\nN20 G49\nN30 G91\nN40 G28 X0 Y0 Z0\nN50 G90\nN60 M06 T01\nN70 G43 H01\n")
g.write("N80 M03 S1000\n")#<- VELOCITA' DI ROTAZIONE DELLA FRESA [giri/min]
g.write("N90 F10\n")#<- VELOCITA' DI AVANZAMENTO DELLA FRESA [mm/min]
z0=float(ind_z0.get())#profondità movimenti rapidi (sopra il pezzo)
z1=float(ind_z1.get())#profondità di lavoro finale (dentro il pezzo)
m=1
n=100#numeri righe interni al codice
np=int(ind_np.get())#n. passate da eseguire,ognuna a z più profonda
while m<=np:
g.write("(passata n."+str(m)+' di '+str(np)+'\n')
z=z1*m/np
f=open(nomefile,'r')
riga=f.readline()
while riga<>'':
if riga[0:6]=='\n':#non interpreta i tag
g.write('N'+str(n)+' G01 Z'+str(z0)+'\n')#esce a vel.di lavoro
n=n+10
riga=f.readline()
elif riga=='\n':
riga=f.readline()
xC=float(riga)
riga=f.readline()
yC=c_altezza/scl-float(riga)
riga=f.readline()#
riga=f.readline()#x punto finale
x=float(riga)
riga=f.readline()#y punto finale
y=c_altezza/scl-float(riga)
riga=f.readline()
g.write('N'+str(n)+' G02 X'+str(x)+' Y'+str(y)+' I'+str(xC)+' J'+str(yC)+'\n')
n=n+10
elif riga=='\n':
riga=f.readline()
xC=float(riga)
riga=f.readline()
yC=c_altezza/scl-float(riga)
riga=f.readline()#
riga=f.readline()#x punto finale
x=float(riga)
riga=f.readline()#y punto finale
y=c_altezza/scl-float(riga)
riga=f.readline()
g.write('N'+str(n)+' G03 X'+str(x)+' Y'+str(y)+' I'+str(xC)+' J'+str(yC)+'\n')
n=n+10
else:
x=float(riga)
riga=f.readline()
y=c_altezza/scl-float(riga)
riga=f.readline()
if nuovalinea==1:
g.write('N'+str(n)+' G00 X'+str(x)+' Y'+str(y)+'\n')#va in rapido all'inizio linea
n=n+10
g.write('N'+str(n)+' G01 Z'+str(z)+'\n')#scende a profondità di lavoro
n=n+10
else:#la linea era già cominciata,avanzamento a vel.di lavoro fino al nuovo punto
g.write('N'+str(n)+' G01 X'+str(x)+' Y'+str(y)+'\n')
n=n+10
nuovalinea=0
f.close()
m=m+1
g.write('(fine passate\n')
g.write('N'+str(n)+' G00 Z10\n')
n=n+10
g.write('N'+str(n)+' G49\n')
n=n+10
g.write('N'+str(n)+' G91\n')
n=n+10
g.write('N'+str(n)+' G28 X0 Y0 Z0\n')
n=n+10
g.write('N'+str(n)+' G90\n')
n=n+10
g.write('N'+str(n)+' M30\n')
n=n+10
g.close()
print 'codice registato in '+nomecodice
def latogriglia():#imposta il valore desiderato del lato della griglia,in mm
global punti_griglia,lg
lg=ind_griglia.get()
print 'lato delle maglie della griglia impostato a '+str(lg)+' mm'
l=len(punti_griglia)#cancella la griglia se presente e la ridisegna con la nuova maglia
for i in range(0,l):
pallino=punti_griglia[i]
canvas.delete(pallino)
vedigriglia()
def vedigriglia():
global punti_griglia,lg
lg=float(ind_griglia.get())#lato della griglia in mm
si=grigliavisibile.get()
delta=lg*scl#lato della griglia in pixel
if si==1:
y=c_altezza
while y>=0:
x=0
while x<=c_base:
pallino=canvas.create_oval(x-1,y-1,x+1,y+1,fill=coloregriglia)
punti_griglia.append(pallino)
x=x+delta
y=y-delta
# Nx=int(c_base/(lg*scl))
# Ny=int(c_altezza/(lg*scl))
# y=Ny
# while y>0:
# x=0
# while x<=Nx:#disegna i punti della griglia regolare
# pallino=canvas.create_oval(x*lg*scl-1,y*lg*scl-1,x*lg*scl+1,y*lg*scl+1,fill=coloregriglia)
# punti_griglia.append(pallino)
# x=x+1
# y=y-1
else:
l=len(punti_griglia)
for i in range(0,l):
pallino=punti_griglia[i]
canvas.delete(pallino)
def snap():#attiva la cattura dei punti ai nodi della griglia
global cattura
cattura=catturapunti.get()
print 'cattura dei punti ai nodi della griglia attivata'
def scala():#definisce la scala del disegno
global scl
scl=int(ind_scala.get())
print 'scala del disegno impostata a '+str(scl)+' pixel/mm'
l=len(punti_griglia)#cancella la griglia se presente e la ridisegna con la nuova maglia
for i in range(0,l):
pallino=punti_griglia[i]
canvas.delete(pallino)
vedigriglia()
apri()
def arco_or():
global arco_orario, centro_arco
if len(listapunti)>0:
arco_antiorario=0
arco_orario=1
centro_arco=1
print 'arco di circonferenza in senso orario:'
print 'indicare il centro dell\'arco'
else:
arco_antiorario=0
arco_orario=0
centro_arco=0
print 'deve essere specificato il primo punto dell\'arco prima di chiamare la funzione'
def arco_antior():
global arco_antiorario, centro_arco
if len(listapunti)>0:
arco_antiorario=1
arco_orario=0
centro_arco=1
print 'arco di circonferenza in senso antiorario:'
print 'indicare il centro dell\'arco'
else:
arco_antiorario=0
arco_orario=0
centro_arco=0
print 'deve essere specificato il primo punto dell\'arco prima di chiamare la funzione'
def riscala():#riscrive il doc. linee moltiplicando tutte le coord.per il fattore indicato nella casella
fattorescala=float(ind_riscala.get())
print "cambio di scala del disegno secondo il fattore "+str(fattorescala)+" in corso... attendere"
f=open(nomefile,'r')
g=open('temp','w')
print "scrittura del file temporaneo"
riga=f.readline()
while riga<>'':
if riga[0]=='<':#è un tag aperto o chiuso,va trascritto com'è
g.write(riga)
elif riga=='\n':#eventuale riga vuota,meglio che sia in grado di saltarla
pass
elif riga=='\r\n':#a capo per S.O. diversi da quelli buoni
pass
else:
n=float(riga)#la riga letta dovrebbe proprio essere una coordinata;sennò va a finir male!
n=n*fattorescala
g.write(str(n)+'\n')
riga=f.readline()
g.close()
f.close()
f=open(nomefile,'w')
g=open('temp','r')
print "riscrittura del file delle linee"
riga=g.readline()
while riga<>'':
f.write(riga)
riga=g.readline()
f.close()
apri()
def trasla_x():#riscrive il doc. linee sommando a tutte le coord. x il deltax indicato nella casella
delta=float(ind_traslax.get())
print "traslazione in x del disegno in corso... attendere"
f=open(nomefile,'r')
g=open('temp','w')
x=1#ricorda se l'ultima coordinata letta era una x o una y
print "scrittura del file temporaneo"
riga=f.readline()
while riga<>'':
if riga[0]=='<':#è un tag aperto o chiuso,va trascritto com'è
g.write(riga)
elif riga=='\n':#eventuale riga vuota,meglio che sia in grado di saltarla
pass
elif riga=='\r\n':#a capo per S.O. diversi da quelli buoni
pass
else:
if x==1:#è una coordinata x, si aggiunge delta
n=float(riga)#la riga letta dovrebbe proprio essere una coordinata;sennò va a finir male!
n=n+delta
g.write(str(n)+'\n')
x=0
else:#è una coordinata y,si lascia così
g.write(riga)
x=1
riga=f.readline()
g.close()
f.close()
f=open(nomefile,'w')
g=open('temp','r')
print "riscrittura del file delle linee"
riga=g.readline()
while riga<>'':
f.write(riga)
riga=g.readline()
f.close()
apri()
def trasla_y():#riscrive il doc. linee sommando a tutte le coord. y il deltay indicato nella casella
delta=float(ind_traslay.get())
print "traslazione in y del disegno in corso... attendere"
f=open(nomefile,'r')
g=open('temp','w')
x=1#ricorda se l'ultima coordinata letta era una x o una y
print "scrittura del file temporaneo"
riga=f.readline()
while riga<>'':
if riga[0]=='<':#è un tag aperto o chiuso,va trascritto com'è
g.write(riga)
elif riga=='\n':#eventuale riga vuota,meglio che sia in grado di saltarla
pass
elif riga=='\r\n':#a capo per S.O. diversi da quelli buoni
pass
else:
if x==1:#è una coordinata x, si lascia così
g.write(riga)
x=0
else:#è una coordinata y,si lascia così
n=float(riga)#la riga letta dovrebbe proprio essere una coordinata;sennò va a finir male!
n=n-delta
g.write(str(n)+'\n')
x=1
riga=f.readline()
g.close()
f.close()
f=open(nomefile,'w')
g=open('temp','r')
print "riscrittura del file delle linee"
riga=g.readline()
while riga<>'':
f.write(riga)
riga=g.readline()
f.close()
apri()
#ABBOZZI DI FUNZIONI PER CANCELLARE I PUNTI GIA' INSERITI
# def ritorna():#elimina l'ultimo punto inserito in una linea non ancora chiusa
# print "funzione ritorna"
# l=len(listapunti)
# ce=0#numero di coordinate eliminate;bisogna toglierne le due dell'ultimo punto segnato
# while l>0 and ce<2:
# if listapunti[l][0]<>'c':
# ce=ce+1
# listapunti.pop()
#
# def cancella():
# raggio=5#intorno del punto cliccato entro cui cercare il punto da cancellare
# x=canvas.canvasx(evento.x)
# y=canvas.canvasy(evento.y)
# r1=''
# r2=''
# r3=''
# r4=''
# r5=''
# r6=''
# f=open(nomelinee,'r')
# riga=f.readline()
# while riga<>'':
# r1=r2
# r2=r3
# r3=r4
# r4=r5
# r5=r6
# r6=riga
# riga=f.readline()
root=Tk()
root.title("cammino")
canvas=Canvas(root,width=c_base,height=c_altezza,bd=2,bg="#000000",xscrollincrement=20,yscrollincrement=20,cursor="cross")
canvas.grid(row=0,column=0,rowspan=15)
canvas.bind("",segnapunto)
canvas.bind("",chiudilinea)
P_nuovo=Button(root,text="nuovo doc",command=nuovo,width=12)
P_nuovo.grid(row=0,column=1)
P_apri=Button(root,text="apri doc",command=apri,width=12)
P_apri.grid(row=1,column=1)
P_genera=Button(root,text="genera codice",command=generacodice,width=12)
P_genera.grid(row=2,column=1)
Label(root,text="z movim.rapido").grid(row=3,column=1)
#P_z0=Button(root,text="z movim.rapido",command=scala,width=12)
#P_z0.grid(row=3,column=1)
ind_z0=Entry(width=5)
ind_z0.grid(row=3,column=2)
ind_z0.insert(0,"1")
Label(root,text="z lavoro").grid(row=4,column=1)
#P_z1=Button(root,text="z lavoro",command=,width=12)
#P_z1.grid(row=4,column=1)
ind_z1=Entry(width=5)
ind_z1.grid(row=4,column=2)
ind_z1.insert(0,"-3")
Label(root,text="n. passate").grid(row=5,column=1)
#P_np=Button(root,text="n. passate",command=,width=12)
#P_np.grid(row=5,column=1)
ind_np=Entry(width=5)
ind_np.grid(row=5,column=2)
ind_np.insert(0,"3")
P_scala=Button(root,text="scala [px/mm]",command=scala,width=12)
P_scala.grid(row=6,column=1)
ind_scala=Entry(width=5)
ind_scala.grid(row=6,column=2)
ind_scala.insert(0,"10")
P_griglia=Button(root,text="lato griglia [mm]",command=latogriglia,width=12)
P_griglia.grid(row=7,column=1)
ind_griglia=Entry(width=5)
ind_griglia.grid(row=7,column=2)
ind_griglia.insert(0,lg)
grigliavisibile=IntVar()
P_vdgriglia=Checkbutton(root,text="vedi griglia",variable=grigliavisibile,command=vedigriglia)
P_vdgriglia.grid(row=8,column=1)
catturapunti=IntVar()
P_snap=Checkbutton(root,text="cattura punti",variable=catturapunti,command=snap)
P_snap.grid(row=9,column=1)
P_circ_or=Button(root,text="arco orario",command=arco_or,width=12)
P_circ_or.grid(row=10,column=1)
P_circ_antior=Button(root,text="arco antiorario",command=arco_antior,width=12)
P_circ_antior.grid(row=11,column=1)
P_riscala=Button(root,text="Riscala disegno",command=riscala,width=12)
P_riscala.grid(row=12,column=1)
ind_riscala=Entry(width=5)
ind_riscala.grid(row=12,column=2)
ind_riscala.insert(0,"1")
P_traslax=Button(root,text="Trasla +x [mm]",command=trasla_x,width=12)
P_traslax.grid(row=13,column=1)
ind_traslax=Entry(width=5)
ind_traslax.grid(row=13,column=2)
ind_traslax.insert(0,"0")
P_traslay=Button(root,text="Trasla +y [mm]",command=trasla_y,width=12)
P_traslay.grid(row=14,column=1)
ind_traslay=Entry(width=5)
ind_traslay.grid(row=14,column=2)
ind_traslay.insert(0,"-0")
root.mainloop()