Forum >> Programmazione Python >> GUI >> Tkinter - Spinbox .... come si usa

Pagina: 1 2 Avanti

Buonasera, devo creare un'interfaccia , con delle spinbox , che mi permetta di selezionare una serie di valori.
Ho bisogno pero' che la spinbox , quando si avvia il programma , contenga come valore l'ultimo che avevo selezionato la volta precedente.
Il valore che deve apparire all'avvio lo salvaro' su un file quando lo settero' e lo leggero' al prossimo avvio.
Io ho provato a fare cosi :

es. n° 1 : Spinbox(minni, width = 6 , from_ = 60, to = 75 , increment = 3)

es. n° 2 : Spinbox(minni, values = "65" , width = 6 , from_ = 60, to = 75 , increment = 3)

Nell'esempio numero uno la spinbox parte con il primo valore e lo posso modificare.
Nell'esempio 2 la spinbox parte con il valore impostato, pero' non è modificabile.

Vi chiedo, per la vostra esperienza, qual'è la sintassi giusta per avere un spinbox che si avvii con un valore e che lo stesso poi sia modificabile.
P.s : premetto che io volevo farlo con una combo ma il tkinter non l'ho trovata.
Grazie a chi sapesse aiutarmi
Alberto

------
Alberto
Ti suggerisco questo video anche se in spagnolo
.youtube.com/watch?v=nbOtOtBKxQQ
Ti suggerisco questo video anche se in spagnolo
.youtube.com/watch?v=nbOtOtBKxQQ

Grazie per il suggerimento al video, guardato e riguardato .....adesso cerchero' di mettere in pratica.

Ma tornando alle Spinbox, ho valutato che dovendo il programmino girare sul Raspberry 3 con il suo schermo lcd originale da 7", mi sembra piu' "carino" utilizare le Spinbox invece delle Combo.

Ripropongo quindi il quesito di prima, come faccio ad impostare un valore di partenza (che non è necessariamente il primo del range) e poter poi lasciare che l'utente dall Gui selezioni il valore che gli serve ??

Grazie per l'aiuto


--- Ultima modifica di Trescon in data 2017-03-21 14:42:56 ---
------
Alberto
Allegati
Mi si aggiungono problemi su problemi ..... :

a = 66
b = 72

scheda_1_t1 = Spinbox(minni, width = 6 , from_ = 60, to = 75 , increment = 3, textvariable = a) # scelte

scheda_1_t2 = Spinbox(minni, width = 6 , from_ = 60, to = 75 , increment = 3 , values = b)

Il problema è che nella prima versione non mi mette nessun dato di partenza all'avvio del programma (se non il "60") mentre nella seconda mi mette fisso il valore e non me lo fa variare.

E poi altri quesito , come estraggo i dati .... dalla variabile scheda_1_t1 utilizzando un .get() ??
Ho provato ma non mi funziona, quindi dove sbaglio ??
Grazie

Alberto
------
Alberto
Per quel che riguarda il metodo get intendevo una cosa del genere

def getvalue():
print(int(popcorn.get()))

Dove popcorn è l'oggetto spinbox
Per le altre domande cercherò di rispondere da casa, ma le risposte le trovi anche nella documentazione delle spinbox
Visto che ci siamo posti il codice della spinbox che hai creato, cosi magari ci lavoriamo su?
Il link per la documentazione:
http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html


--- Ultima modifica di Orsogrizzly in data 2017-03-22 23:00:42 ---
OK , posto il tutto...... premettendo che si tratta di un Work in Progress di un IGNORANTE in python.
Prima che qualcuno me lo chieda, ho usato Grid perchè dovevo ancora prendere in considerazione Place.

# Interroga le schede del CNCe mostra il risultato su label #
### In Lavorazione  ###

try:
    from Tkinter import *
    from tkinter import ttk

except:
    from tkinter import *
    from tkinter import ttk



def chiama_setup(): # Finestra per impostazione Parametri di Allarme
	minni=Tk()
	minni.geometry('450x350+800+100')
	minni.title('Configura Allarmi')
	valor = StringVar()
	a =66
	b = 72

	scheda1_minni = Label(minni,text = "Scheda 1",bg = "white") # Etichette Schede
	scheda2_minni = Label(minni,text = "Scheda 2",bg = "white")
	scheda3_minni = Label(minni,text = "Scheda 3",bg = "white")
	
# Spazi Venticali
	s_minni_v1 = Label(minni, text = "",width =3)
	s_minni_v2 = Label(minni, text = "",width =3)
	s_minni_v3 = Label(minni, text = "",width =3)

#
	l_minni_1 = Label(minni,text = "T° Ponte 1 :",bg = "white") # etichette Parametri
	l_minni_2 = Label(minni,text = "T° Ponte 2 :",bg = "white")
	l_minni_3 = Label(minni, text = "Tensione Alim. :" , bg = "white")
	l_minni_4 = Label(minni, text = "Corrente Ponte 1 :" , bg = "white")
	l_minni_5 = Label(minni, text = "Corrente Ponte 2 :" , bg = "white")
#	
	so_minni_0 = Label(minni, text = "") # Etichette x gli spazi orizzontali
	so_minni_1 = Label(minni, text = "")
	so_minni_2 = Label(minni, text = "")
	so_minni_3 = Label(minni, text = "")
	so_minni_4 = Label(minni, text = "")
	so_minni_5 = Label(minni, text = "")
	so_minni_6 = Label(minni, text = "")

#	
# Posizioni Etichette
	scheda1_minni.grid(row =1 , column = 2) # Posizione Etichette Schede
	scheda2_minni.grid(row =1 , column = 6)
	scheda3_minni.grid(row =1 , column = 10)
#
	so_minni_1.grid(row = 2 , column = 0) # Spazio Posizione Etichette Parametri
	l_minni_1.grid(row = 3 , column = 0)  # Posizione Etichette Parametri
	
	so_minni_2.grid(row = 4 , column = 0)
	l_minni_2.grid(row = 5 , column = 0)
	
	so_minni_3.grid(row = 6 , column = 0)
	l_minni_3.grid(row = 7 , column = 0)
	
	so_minni_4.grid(row = 8 , column = 0)
	l_minni_4.grid(row = 9 , column = 0)
	
	so_minni_5.grid(row = 10 , column = 0)
	l_minni_5.grid(row = 11 , column = 0)
	
	so_minni_6.grid(row = 12 , column = 0)

#
#
	# Posizione Spazi Verticali (colonne)
	s_minni_v1.grid(row = 0 , column = 3)
	s_minni_v2.grid(row = 0 , column = 7)
	s_minni_v3.grid(row = 0 , column = 11)
#
#
	scheda_1_t1 = Spinbox(minni, width = 6 , from_ = 60, to = 75 , increment = 3, textvariable = a) # scelte per scheda 1
	scheda_1_t2 = Spinbox(minni, width = 6 , from_ = 60, to = 75 , increment = 3 , values = b)
	scheda_1_v1 = Spinbox(minni, width = 6 , from_ = 20, to = 50 , increment = 3)
	scheda_1_a1 = Spinbox(minni, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)
	scheda_1_a2 = Spinbox(minni, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)

	scheda_1_t1.grid(row = 3 , column = 2) # posizioni scelte scheda 1
	scheda_1_t2.grid(row = 5 , column = 2)
	scheda_1_v1.grid(row = 7 , column = 2)
	scheda_1_a1.grid(row = 9 , column = 2)
	scheda_1_a2.grid(row = 11 , column = 2)
#
	scheda_2_t1 = Spinbox(minni , width = 6 , from_ = 60, to = 75 , increment = 3) # scelte per scheda 2
	scheda_2_t2 = Spinbox(minni, width = 6 , from_ = 60, to = 75 , increment = 3)
	scheda_2_v1 = Spinbox(minni, width = 6 , from_ = 20, to = 50 , increment = 3)
	scheda_2_a1 = Spinbox(minni, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)
	scheda_2_a2 = Spinbox(minni, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)

	scheda_2_t1.grid(row = 3 , column = 6) # posizioni scelte scheda 2
	scheda_2_t2.grid(row = 5 , column = 6)
	scheda_2_v1.grid(row = 7 , column = 6)
	scheda_2_a1.grid(row = 9 , column = 6)
	scheda_2_a2.grid(row = 11 , column = 6)
#
	scheda_3_t1 = Spinbox(minni, width = 6 , from_ = 60, to = 75 , increment = 3) # scelte per scheda 3
	scheda_3_t2 = Spinbox(minni, width = 6 , from_ = 60, to = 75 , increment = 3)
	scheda_3_v1 = Spinbox(minni, width = 6 , from_ = 20, to = 50 , increment = 3)
	scheda_3_a1 = Spinbox(minni, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)
	scheda_3_a2 = Spinbox(minni, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)

	scheda_3_t1.grid(row = 3 , column = 10) # posizioni scelte scheda 3
	scheda_3_t2.grid(row = 5 , column = 10)
	scheda_3_v1.grid(row = 7 , column = 10)
	scheda_3_a1.grid(row = 9 , column = 10)
	scheda_3_a2.grid(row = 11 , column = 10)

	conferma1 = Button(minni,text ="Conferma", command = settaggi(valor) , bg="white")
#	conferma2 = Button(minni,text ="Conferma 2", command = Somma , bg="white")
#	conferma3 = Button(minni,text ="Conferma 3", command = Somma , bg="white")
#
	

#ltot = Label(root,text = "Totale :",bg = "white")
#lcalctot = Label(root,text = "" ,width = 6,bg = "gray")

	conferma1.grid(row = 24 , column = 12)
#	conferma2.grid(row = 24 , column = 6)
#	conferma3.grid(row = 24 , column = 10)


	#euser = Entry(root, textvariable = username, bg = "white")
	#epassword = Entry(root,textvariable = password, bg = "white", show = "*")
	
		# Creare un Listbox in minni
#	lista = Listbox(minni)
#	lista.insert(0,"C++")
#	lista.insert(1,"Java")
#	lista.insert(2,"Python")
#	lista.pack()
	minni.mainloop()

def settaggi(valor):
	print(valor.get())
		
def chiama_about():
	gnocco =0
	#
	
	
def uscita():
   # risposta = message.askyesno(title="Uscita",message = "Vuoi davvero uscire")
    #if risposta:
        root.destroy()

def Somma():
	a=primo_numero.get() + ((primo_numero.get()/100) * secondo_numero.get())
	lcalctot.config(text =a)
	   
root = Tk()
root.title("Lettura Parametri Schede CNC")
root.geometry('450x350+100+100')
scheda_1_t1 = IntVar()

# creare un menu
barra_menu = Menu(root)
menu_file=Menu(barra_menu,tearoff=0) # crea Menu File
barra_menu.add_cascade(label="File",menu = menu_file)
menu_file.add_command(label="Nuovo")
menu_file.add_command(label="Apri" )# command = apri_file
menu_file.add_command(label="Salva")
menu_file.add_command(label="Esci",command = uscita)
root.config(menu = barra_menu)

menu_setup=Menu(barra_menu,tearoff=0) # Crea Menu Setup
barra_menu.add_cascade(label="Setup",menu = menu_setup)
menu_setup.add_command(label="Setup",command = chiama_setup)

menu_about=Menu(barra_menu,tearoff=0) # Crea Menu About
barra_menu.add_cascade(label="About",menu = menu_about)
menu_about.add_command(label="About",command = chiama_about)


primo_numero = IntVar(value = "")
secondo_numero = IntVar(value = "")

a = IntVar(value = "")

# Etichette
scheda1 = Label(root,text = "Scheda 1",bg = "white")
scheda2 = Label(root,text = "Scheda 2",bg = "white")
scheda3 = Label(root,text = "Scheda 3",bg = "white")

l1 = Label(root,text = "T° Ponte 1 :",bg = "white")
l2 = Label(root,text = "T° Ponte 2 :",bg = "white")
l3 = Label(root, text = "Tensione Alim. :" , bg = "white")
l4 = Label(root, text = "Corrente Ponte 1 :" , bg = "white")
l5 = Label(root, text = "Corrente Ponte 2 :" , bg = "white")

# Label di Output
# Label scheda 1 #
lscheda1_cponte1 = Label(root,text = "100" , width = 5 , bg = "yellow")
lscheda1_cponte2 = Label(root,text = "" , width = 5 , bg = "yellow")
lscheda1_vponte = Label(root,text = "" , width = 5 , bg = "yellow")
lscheda1_iponte1 = Label(root,text = "45" , width = 5 , bg = "yellow")
lscheda1_iponte2 = Label(root,text = "" , width = 5 , bg = "yellow")

# Label scheda 2 #
lscheda2_cponte1 = Label(root,text = "" , width = 5 , bg = "yellow")
lscheda2_cponte2 = Label(root,text = "" , width = 5 , bg = "yellow")
lscheda2_vponte = Label(root,text = "25" , width = 5 , bg = "yellow")
lscheda2_iponte1 = Label(root,text = "" , width = 5 , bg = "yellow")
lscheda2_iponte2 = Label(root,text = "" , width = 5 , bg = "yellow")

# Label scheda 3 #
lscheda3_cponte1 = Label(root,text = "" , width = 5 , bg = "yellow")
lscheda3_cponte2 = Label(root,text = "" , width = 5 , bg = "yellow")
lscheda3_vponte = Label(root,text = "" , width = 5 , bg = "yellow")
lscheda3_iponte1 = Label(root,text = "" , width = 5 , bg = "yellow")
lscheda3_iponte2 = Label(root,text = "" , width = 9 , bg = "yellow")


# Spazi Orizzontali
so1 = Label(root, text = "")
so2 = Label(root, text = "")
so3 = Label(root, text = "")
so4 = Label(root, text = "")
so5 = Label(root, text = "")
so6 = Label(root, text = "")
so7 = Label(root, text = "")

# Spazi Venticali
sv1 = Label(root, text = "",width =3)
sv2 = Label(root, text = "",width =3)
sv3 = Label(root, text = "",width =3)

#
#i1 = Entry(root,textvariable = primo_numero,width = 6,bg = "white")
#i2 = Entry(root,textvariable = secondo_numero,width = 3,bg = "white")

#### Sezione .grid
# Posizione Etichette
scheda1.grid(row = 0 , column = 2)
scheda2.grid(row = 0 , column = 6)
scheda3.grid(row = 0 , column = 10)

l1.grid(row = 2 , column = 0) # label
l2.grid(row = 4 , column = 0)
l3.grid(row = 6 , column = 0)
l4.grid(row = 8 , column = 0)
l5.grid(row = 10 , column = 0)

# Posizione Label Scheda 1 #
lscheda1_cponte1.grid(row = 2 , column = 2)
lscheda1_cponte2.grid(row = 4 , column = 2)
lscheda1_vponte.grid(row = 6 , column = 2)
lscheda1_iponte1.grid(row = 8 , column = 2)
lscheda1_iponte2.grid(row = 10 , column = 2)

# Posizione Label Scheda 2 #
lscheda2_cponte1.grid(row = 2 , column = 6)
lscheda2_cponte2.grid(row = 4 , column = 6)
lscheda2_vponte.grid(row = 6 , column = 6)
lscheda2_iponte1.grid(row = 8 , column = 6)
lscheda2_iponte2.grid(row = 10 , column = 6)

# Posizione Label Scheda 3 #
lscheda3_cponte1.grid(row = 2 , column = 10)
lscheda3_cponte2.grid(row = 4 , column = 10)
lscheda3_vponte.grid(row = 6 , column = 10)
lscheda3_iponte1.grid(row = 8 , column = 10)
lscheda3_iponte2.grid(row = 10 , column = 10)

# Posizione Spazi Orizzontali (righe)
so1.grid(row = 0 , column = 0) # spazi interlinea
so2.grid(row = 1 , column = 0)
so3.grid(row = 3 , column = 0)
so4.grid(row = 5 , column = 0)
so5.grid(row = 7 , column = 0)
so6.grid(row = 9 , column = 0)
so7.grid(row = 11 , column = 0) # dopo corrente 2

# Posizione Spazi Verticali (colonne)
sv1.grid(row = 0 , column = 3)
sv2.grid(row = 0 , column = 7)
sv3.grid(row = 0 , column = 11)


#i1.grid(row = 0 , column = 1) # input
#i2.grid(row = 2 , column = 1)


refr1 = Button(root,text ="Refresh 1", command = Somma , bg="white")
refr2 = Button(root,text ="Refresh 2", command = Somma , bg="white")
refr3 = Button(root,text ="Refresh 3", command = Somma , bg="white")

#ltot = Label(root,text = "Totale :",bg = "white")
#lcalctot = Label(root,text = "" ,width = 6,bg = "gray")

refr1.grid(row = 23 , column = 2)
refr2.grid(row = 23 , column = 6)
refr3.grid(row = 23 , column = 10)

#ltot.grid(row = 19 , column = 2)
#lcalctot.grid(row = 18 , column = 10)

root.mainloop()    

Spero di non fare TROPPA brutta figura.
Grazie
Alberto
------
Alberto
non so se tu abbia intenzione di creare solo il programma che stai elaborando, ma anche in questo caso credo sia opportuno che tu approfondisca le classi di python in quanto per andare avanti con il programma che stai creando ti sono necessarie ti metto un link per avere un idea di come dovresti procedere con il programma:
http://www.webalice.it/srosta/tkinter003.html
elaborare ciò che hai fatto è possibile ma andresti incontro a delle problematiche che ti complicherebbero la vita inutilmente.
ecco solo la parte con la seconda finestra quelle con le spinbox, ho cercato di mantenere la costruzione che hai usato tu nella stesura del codice,se fai eseguire il codice vedrai la finestra interessata,
il tutto è stato creato/modificato in ambiente linux con python 2.7.6:

from Tkinter import *


########################################################################
class ConfiguraAllarmi(Frame):
	""""""

	#----------------------------------------------------------------------
	def __init__(self):
		"""Constructor : Imposta la finestra e tutti i suoi oggetti"""
		Frame.__init__(self)
		self.master.title("Finestra Configura Allarmi")
		self.master.geometry('450x350+800+100')
		self.grid()

		# Etichette Schede
		self.scheda1 = Label(self,text = "Scheda 1",bg = "white")
		self.scheda2 = Label(self,text = "Scheda 2",bg = "white")
		self.scheda3 = Label(self,text = "Scheda 3",bg = "white")
		self.scheda1.grid(row = 1,  column = 2)
		self.scheda2.grid(row =1 , column = 6)
		self.scheda3.grid(row =1 , column = 10)
		
		# etichette Parametri
		self.ponte1 = Label(self,text = "T° Ponte 1 :",bg = "white") 
		self.ponte2 = Label(self,text = "T° Ponte 2 :",bg = "white")
		self.tensioneAlimentazione = Label(self, text = "Tensione Alim. :" , bg = "white")
		self.correntePonte1 = Label(self, text = "Corrente Ponte 1 :" , bg = "white")
		self.correntePonte2 = Label(self, text = "Corrente Ponte 2 :" , bg = "white")
		
		# Posizione etichette Parametri
		self.ponte1.grid(row = 3 , column = 0)
		self.ponte2.grid(row = 5 , column = 0)
		self.tensioneAlimentazione.grid(row = 7 , column = 0)
		self.correntePonte1.grid(row = 9 , column = 0)
		self.correntePonte2.grid(row = 11 , column = 0)
		
		#SPINBOX
		#prima scheda
		self.valoreScheda1Tensione1 = Spinbox(self, width = 6 , from_ = 60, to = 75 , increment = 3) #, textvariable = a) # scelte per scheda 1
		self.valoreScheda1Tensione2 = Spinbox(self, width = 6 , from_ = 60, to = 75 , increment = 3) # , values = b)
		self.valoreScheda1Voltaggio1 = Spinbox(self, width = 6 , from_ = 20, to = 50 , increment = 3)
		self.valoreScheda1Ampere1 = Spinbox(self, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)
		self.valoreScheda1Ampere2 = Spinbox(self, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)
		#seconda scheda
		self.valoreScheda2Tensione1 = Spinbox(self, width = 6 , from_ = 60, to = 75 , increment = 3)
		self.valoreScheda2Tensione2 = Spinbox(self, width = 6 , from_ = 60, to = 75 , increment = 3)
		self.valoreScheda2Voltaggio1 = Spinbox(self, width = 6 , from_ = 20, to = 50 , increment = 3)
		self.valoreScheda2Ampere1 = Spinbox(self, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)
		self.valoreScheda2Ampere2 = Spinbox(self, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)
		#terza scheda
		self.valoreScheda3Tensione1 = Spinbox(self, width = 6 , from_ = 60, to = 75 , increment = 3)
		self.valoreScheda3Tensione2 = Spinbox(self, width = 6 , from_ = 60, to = 75 , increment = 3)
		self.valoreScheda3Voltaggio1 = Spinbox(self, width = 6 , from_ = 20, to = 50 , increment = 3)
		self.valoreScheda3Ampere1 = Spinbox(self, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)
		self.valoreScheda3Ampere2 = Spinbox(self, width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5)
		
		#Posizioni spinbox
		# posizioni scheda 1
		self.valoreScheda1Tensione1.grid(row = 3 , column = 2) 
		self.valoreScheda1Tensione2.grid(row = 5 , column = 2)
		self.valoreScheda1Voltaggio1.grid(row = 7 , column = 2)
		self.valoreScheda1Ampere1.grid(row = 9 , column = 2)
		self.valoreScheda1Ampere2.grid(row = 11 , column = 2)
		# posizioni scheda 2
		self.valoreScheda2Tensione1.grid(row = 3 , column = 6)
		self.valoreScheda2Tensione2.grid(row = 5 , column = 6)
		self.valoreScheda2Voltaggio1.grid(row = 7 , column = 6)
		self.valoreScheda2Ampere1.grid(row = 9 , column = 6)
		self.valoreScheda2Ampere2.grid(row = 11 , column = 6)
		# posizioni scheda 3
		self.valoreScheda3Tensione1.grid(row = 3 , column = 10)
		self.valoreScheda3Tensione2.grid(row = 5 , column = 10)
		self.valoreScheda3Voltaggio1.grid(row = 7 , column = 10)
		self.valoreScheda3Ampere1.grid(row = 9 , column = 10)
		self.valoreScheda3Ampere2.grid(row = 11 , column = 10)
		
		# Spazi Verticali
		self.vuotaVerticale1 = Label(self, text = "",width =3)
		self.vuotaVerticale2 = Label(self, text = "",width =3)
		self.vuotaVerticale3 = Label(self, text = "",width =3)
		
		# Spazi Orizzontali vuoti 
		self.etichettaVuota0 = Label(self, text = "")
		self.etichettaVuota1 = Label(self, text = "")
		self.etichettaVuota2 = Label(self, text = "")
		self.etichettaVuota3 = Label(self, text = "")
		self.etichettaVuota4 = Label(self, text = "")
		self.etichettaVuota5 = Label(self, text = "")
		self.etichettaVuota6 = Label(self, text = "")
		
		#Posizione Etichette verticali vuote
		self.vuotaVerticale1.grid(row = 0 , column = 3)
		self.vuotaVerticale2.grid(row = 0 , column = 7)
		self.vuotaVerticale3.grid(row = 0 , column = 11)
		
		#Posizione Orizzontali vuote
		self.etichettaVuota0.grid(row = 2 , column = 0)
		self.etichettaVuota1.grid(row = 4 , column = 0)
		self.etichettaVuota2.grid(row = 6 , column = 0)
		self.etichettaVuota3.grid(row = 8 , column = 0)
		self.etichettaVuota4.grid(row = 10 , column = 0)
		self.etichettaVuota5.grid(row = 12 , column = 0)
		
		# Pulsanti
		self.conferma1 = Button(self,text ="Conferma", command = self.settaggi, bg="white")
		self.conferma1.bind(self.settaggi)
		#Posizione Pulsanti
		self.conferma1.grid(row = 24 , column = 12)
		
	def settaggi(self):
		print "pulsante conferma1 schiacciato"
		print self.valoreScheda1Tensione1.get(), " questo è il valore della scheda 1 tensione 1"
		print "se provi a cambiare il valore nella scheda e schiacci nuovamente il pulsante vedrai il cambiamento di valore"

def main():  
	ConfiguraAllarmi().mainloop()
main()



spero di essere stato di aiuto. ;) ;)

P.S. :devil: :devil: :devil:
Nel tempo che dedicherai allo studio di python vai a dare un occhiata anche alla PEP8 : https://www.python.org/dev/peps/pep-0008/
molti programmatori non concedono aiuto a chi non la rispetta o non tenta di rispettarla in quanto ritengono che il dover capire quello che scrive un altro in modo non chiaro sia una perdita di tempo. Detto in modo stringato.
Io non sono un programmatore di professione ne tanto meno un esperto sono un autodidatta che fra l'altro non conosce l'inglese come si dovrebbe e quindi,
anch'io non seguo punto per punto la PEP8 ma nella mia ignoranza cerco di seguirla come e meglio che posso,
idem con la programmazione stessa. :embarrassed: :embarrassed: :P :P


--- Ultima modifica di Orsogrizzly in data 2017-03-29 10:08:22 ---
Grazie Orsogrizly per l'aiuto che hai provato a darmi.
Partendo dal presupposto che sono un babbeo in Python e che utilizzo la versione 3.6.0 ho modificato il mio programma ben due volte.
La prima ho tolto tutti i Grid e inserito dei Place che sono piu' precisi in fase di posizionamento Label e oggetti vari.
La seconda è che ho provato a convertire il programma Main separandolo dal resto dell'interfaccia (parlo della principale) ma mi da un errore su un self non definito :

File "Lettura Schede 0 2.py", line 48, in <module>
self.scheda1 = Label(self.quadro1,text = "Scheda 1",bg = "white").place(x = 120 , y = 10)
NameError: name 'self' is not defined

Non sapendo come gestirlo ho tolto il menu' dall'interfaccia principale e quindi non accedo al momento alla seconda finestra ma ..... una cosa alla volta.
Mi potresti dare una mano e se ti è possibile spiegarmi il perchè dell'errore e anche darmoi un suggerimento ...
Ti allego tutto il programma cosi come è stato modificato (non ho ancora cambiato i nomi delle variabili in "piu' leggibili" e per questo scusami)

# Interroga le schede del CNCe mostra il risultato su label #
### In Lavorazione  ###

try:
    from Tkinter import *
    from tkinter import ttk

except:
    from tkinter import *
    from tkinter import ttk
    
global scheda_1_v1

def settaggi():
	cici = scheda_1_v1.get()
	print(cici)

class FinestraBase:
	def __init__(self,Genitore):
		self.miogenitore=Genitore
		self.quadro1 = Frame(Genitore)
		self.quadro1.pack()
# creare un menu
#self.barra_menu = Menu(Genitore)
#self.menu_file=Menu(barra_menu,tearoff=0) # crea Menu File
#barra_menu.add_cascade(label="File",menu = menu_file)
#menu_file.add_command(label="Nuovo")
#menu_file.add_command(label="Apri" )# command = apri_file
#menu_file.add_command(label="Salva")
#menu_file.add_command(label="Esci",command = uscita)
#root.config(menu = barra_menu)

#menu_setup=Menu(barra_menu,tearoff=0) # Crea Menu Setup
#barra_menu.add_cascade(label="Setup",menu = menu_setup)
#menu_setup.add_command(label="Setup",command = chiama_setup)

#menu_about=Menu(barra_menu,tearoff=0) # Crea Menu About
#barra_menu.add_cascade(label="About",menu = menu_about)
#menu_about.add_command(label="About",command = chiama_about)


#primo_numero = IntVar(value = "")
#secondo_numero = IntVar(value = "")

#a = IntVar(value = "")

# Etichette
self.scheda1 = Label(self.quadro1,text = "Scheda 1",bg = "white").place(x = 120 , y = 10)
scheda2 = Label(root,text = "Scheda 2",bg = "white").place(x = 220 , y = 10)
scheda3 = Label(root,text = "Scheda 3",bg = "white").place(x = 320 , y = 10)

l1 = Label(root,text = "T° Ponte 1 :",bg = "white").place(x = 5 , y = 50)
l2 = Label(root,text = "T° Ponte 2 :",bg = "white").place(x = 5 , y = 100)
l3 = Label(root, text = "Tensione Alim. :" , bg = "white").place(x = 5 , y = 150)
l4 = Label(root, text = "Corrente Ponte 1 :" , bg = "white").place(x = 5 , y = 200)
l5 = Label(root, text = "Corrente Ponte 2 :" , bg = "white").place(x = 5 , y = 250)

# Label di Output
# Label scheda 1 #
lscheda1_cponte1 = Label(root,text = "100" , width = 5 , bg = "yellow").place(x = 120 , y = 50)
lscheda1_cponte2 = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 120 , y = 100)
lscheda1_vponte = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 120 , y = 150)
lscheda1_iponte1 = Label(root,text = "45" , width = 5 , bg = "yellow").place(x = 120 , y = 200)
lscheda1_iponte2 = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 120 , y = 250)

# Label scheda 2 #
lscheda2_cponte1 = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 220 , y = 50)
lscheda2_cponte2 = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 220 , y = 100)
lscheda2_vponte = Label(root,text = "25" , width = 5 , bg = "yellow").place(x = 220 , y = 150)
lscheda2_iponte1 = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 220 , y = 200)
lscheda2_iponte2 = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 220 , y = 250)

# Label scheda 3 #
lscheda3_cponte1 = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 320 , y = 50)
lscheda3_cponte2 = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 320 , y = 100)
lscheda3_vponte = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 320 , y = 150)
lscheda3_iponte1 = Label(root,text = "" , width = 5 , bg = "yellow").place(x = 320 , y = 200)
lscheda3_iponte2 = Label(root,text = "" , width = 9 , bg = "yellow").place(x = 320 , y = 250)

# Pulsanti
refr1 = Button(root,text ="Refresh 1", command = Somma , bg="white").place(x = 120 , y = 300)
refr2 = Button(root,text ="Refresh 2", command = Somma , bg="white").place(x = 220 , y = 300)
refr3 = Button(root,text ="Refresh 3", command = Somma , bg="white").place(x = 320 , y = 300)


def chiama_setup(): # Finestra per impostazione Parametri di Allarme
	minni=Tk()
	minni.geometry('650x350+600+100')
	minni.title('Configura Allarmi')
	scheda_1_v1 = StringVar()
	#a =66
	b = 72

	scheda1_minni = Label(minni , text = "Scheda 1" , bg = "white").place(x = 180 , y = 10) # Etichette Schede
	scheda2_minni = Label(minni , text = "Scheda 2" , bg = "white").place(x = 360 , y = 10)
	scheda3_minni = Label(minni , text = "Scheda 3" , bg = "white").place(x = 530 , y = 10)
	
#
	l_minni_1 = Label(minni , text = "T° Ponte 1 :" , bg = "white").place(x = 5 , y = 50) # etichette Parametri
	l_minni_2 = Label(minni , text = "T° Ponte 2 :" , bg = "white").place(x = 5 , y = 100)
	l_minni_3 = Label(minni , text = "Tensione Alim. :" , bg = "white").place(x = 5 , y = 150)
	l_minni_4 = Label(minni , text = "Corrente Ponte 1 :" , bg = "white").place(x = 5 , y = 200)
	l_minni_5 = Label(minni , text = "Corrente Ponte 2 :" , bg = "white").place(x = 5 , y = 250)

#
	scheda_1_t1 = Spinbox(minni , width = 6 , from_ = 60, to = 75 , increment = 3 , textvariable=a , bd = 2).place(x = 220 , y = 50) # scelte per scheda 1
	scheda_1_t2 = Spinbox(minni , width = 6 , from_ = 60, to = 75 , increment = 3 , values = b, bd = 2).place(x = 220 , y = 100)
	scheda_1_v1 = Spinbox(minni , width = 6 , from_ = 20, to = 50 , increment = 3, bd = 2).place(x = 220 , y = 150)
	scheda_1_a1 = Spinbox(minni , width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5, bd = 2).place(x = 220 , y = 200)
	scheda_1_a2 = Spinbox(minni , width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5, bd = 2).place(x = 220 , y = 250)
# 
	l_scheda_1_t1 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 150 , y = 50) # label scelta memorizzata
	l_scheda_1_t2 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 150 , y = 100) 
	l_scheda_1_v1 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 150 , y = 150) 
	l_scheda_1_a1 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 150 , y = 200) 
	l_scheda_1_a2 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 150 , y = 250) 

#
	scheda_2_t1 = Spinbox(minni , width = 6 , from_ = 60, to = 75 , increment = 3, bd = 2).place(x = 400 , y = 50) # scelte per scheda 2
	scheda_2_t2 = Spinbox(minni , width = 6 , from_ = 60, to = 75 , increment = 3, bd = 2).place(x = 400 , y = 100)
	scheda_2_v1 = Spinbox(minni , width = 6 , from_ = 20, to = 50 , increment = 3, bd = 2).place(x = 400 , y = 150)
	scheda_2_a1 = Spinbox(minni , width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5, bd = 2).place(x = 400 , y = 200)
	scheda_2_a2 = Spinbox(minni , width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5, bd = 2).place(x = 400 , y = 250)

#
	l_scheda_2_t1 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 330 , y = 50) # label scelta memorizzata
	l_scheda_2_t2 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 330 , y = 100) 
	l_scheda_2_v1 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 330 , y = 150) 
	l_scheda_2_a1 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 330 , y = 200) 
	l_scheda_2_a2 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 330 , y = 250) 

#
	scheda_3_t1 = Spinbox(minni , width = 6 , from_ = 60, to = 75 , increment = 3, bd = 2).place(x = 570 , y = 50) # scelte per scheda 3
	scheda_3_t2 = Spinbox(minni , width = 6 , from_ = 60, to = 75 , increment = 3, bd = 2).place(x = 570 , y = 100)
	scheda_3_v1 = Spinbox(minni , width = 6 , from_ = 20, to = 50 , increment = 3, bd = 2).place(x = 570 , y = 150)
	scheda_3_a1 = Spinbox(minni , width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5, bd = 2).place(x = 570 , y = 200)
	scheda_3_a2 = Spinbox(minni , width = 6 , from_ = 0.5, to = 2.5 , increment = 0.5, bd = 2).place(x = 570 , y = 250)

#
	l_scheda_3_t1 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 500 , y = 50) # label scelta memorizzata
	l_scheda_3_t2 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 500 , y = 100) 
	l_scheda_3_v1 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 500 , y = 150) 
	l_scheda_3_a1 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 500 , y = 200) 
	l_scheda_3_a2 = Label(minni , text = "" , width = 5 , bg = "yellow").place(x = 500 , y = 250) 

#
	
	
	conferma1 = Button(minni , text ="Conferma"  , bg="red" , command = settaggi).place(x = 420 , y = 300)
	
	minni.mainloop()

		
def chiama_about():
	gnocco =0
	#
	
	
def uscita():
   # risposta = message.askyesno(title="Uscita",message = "Vuoi davvero uscire")
    #if risposta:
        root.destroy()

def Somma():
	a=primo_numero.get() + ((primo_numero.get()/100) * secondo_numero.get())
	lcalctot.config(text =a)
	   
root = Tk()
root.title("Lettura Parametri Schede CNC")
root.geometry('450x350+100+100')
scheda_1_t1 = IntVar()
finestraBase = FinestraBase(root)

root.mainloop()    

Ti ringrazio se potrai aiutarmi.

Alberto
------
Alberto
Ciao Alberto,
come ti ho già scritto non sono un professionista comunque sono lieto di aiutarti, ma per poterlo fare dobbiamo parlare la stessa lingua :P :D nel senso che come a scuola è meglio lavorare con gli stessi strumenti piuttosto che con strumenti diversi e oltre a questo sarebbe il caso di allinearsi con la stesura del codice in questo modo non ci sarà necessità di riscrivere ogni volta parte o interamente il codice scritto/postato, oltre a questo vorrei se possibile avere più informazioni a riguardo del progetto che stai mettendo in piedi, non per farmi gli affari tuoi ma per capire che genere di complessità potrà assumere il progetto stesso.
Per questi motivi e per altri che ora non elenco ti chiedo di lasciare un recapito e_mail valido sul tuo profilo, ovviamente di questo forum, per poter scambiare info e idee sul progetto stesso e magari sugli strumenti da utilizzare, giusto per non intasare di post che potrebbero andare fuori out il forum.
Ti premetto già che non mi è possibile utilizzare python e quindi tkinter in ambiente windows, al momento non ho a disposizione alcun pc con windows, posso utilizzare python 3.5, come ho già provveduto a settare sulla macchina con qui scrivo, con linux mint 17.2.
Per la versione di python non dovrei aver problemi a passare anche alla 3.6.0.
Altro piccolo appunto, quando posti il codice usa il pulsantino code, è quello con l'icona che i segni di <>, lo clicchi e poi incolli il codice all'interno dello spazio grigio/celeste che è apparso.
Dopo questo out passiamo a qualche risposta.
La prima ho tolto tutti i Grid e inserito dei Place ....
leggendo qua e la sui dei tutorial e su documentazione,tieni presente che il mio inglese è pressochè più che scarso, viene sconsigliato di utiilzzare Place ma meglio utilizzare Grid in quanto più flessibile, oltre a questo con Place setti delle coordinate in pixel assolute, il che, un domani, cambiando il display in qui verrà visualizzata la tua GUI, potrebbe portare a delle difficoltà di visualizzazione(detto in termini non tecnici e brevi).
Quindi il consiglio è quello di tornare alla Grid
a primo approccio può sembrare ostica e di difficile utilizzo ma non appena ci hai fatto mano vedrai che ti troverai bene, ti ricordo che è sempre opportuno dare un occhiata alla documentazione di ciò che intendi utilizzare, per gestire la spaziatura tra i vari oggetti con la Grid si possono utilizzare le opzioni:
 padx= , pady= 
restando sul codice che ti avevo postato ecco un esempio:
#Posizioni spinbox
		# posizioni scheda 1
		self.valoreScheda1Tensione1.grid(row = 3 , column = 2, padx= 10, pady= 10) 
		self.valoreScheda1Tensione2.grid(row = 5 , column = 2, padx= 10, pady= 10)
invece per:
La seconda è che ho provato a convertire il programma Main separandolo
dal resto dell'interfaccia (parlo della principale) ma mi da un errore
su un self non definito :
per poterti aiutare senza incorrere a strafalcioni, che ci porterebbero fuori strada, come già scritto prima usa il tasto code per inserire il codice; in quanto l'errore che viene segnalato potrebbe, e dico potrebbe essere causato da un indentazione sbagliata.

Aspetto tue notizie by Orsogrizzly



Ciao Orsogrizly, allora cominciamo dalla fine; l'utimo codice che ho postato ieri era stato inserito con i "<>" , infatti è correttamente indentato.
Per la mail, nel forum è stata inserita..... quindi è a nostra disposizione.
Per quel che riguarda le apparecchiature usate , non ti preoccupare perchè il programma dovra' girare sotto la versione Raspian di linux installata su un Raspberry 3 con collegato il suo monitor originale; quindi windows lo uso solo per creare il programma e basta.
Per il cosa voglio fare ..... è presto detto.
Con un collega ci stiamo costruendo un CNC (controlo numerico) da Zero (intendo che diamo partiti dalla costruzione/progettazione fisica di ogni pezzo; abbiamo già costruito l'asse x , l'asse y dovrebbe andare in produzione nelle prossime settimane ; abbiamo realizzato (sempre progettandole da zero) le tre schede di controllo per i motori step by step (un di controllo con un Microcontrollore Pic e una di potenza per ogni motore).
Ora entra in gioco Python, perchè le varie schede dialogano tra loro con interfaccia RS485 e un Raspberry 3 (dove il linguaggio python è di casa) che serve per il controllo visivamente se ci sono anomalie di funzionamento o momenti critici.
Spero di essere stato esaustivo e non di essere andato troppo Off topic.

------
Alberto


Pagina: 1 2 Avanti



Esegui il login per scrivere una risposta.