Forum >> Principianti >> Associare un tasto ad un bottone

Pagina: 1

Sto utilizzando tkinter per un piccolo programmino con python 3. Vorrei fare in modo di schiacciare il tasto 'invio' su di un 'Entry' per attivare il pulsante 'invia' collegato. Sapreste consigliarmi su come fare?
Uso l'IDLE e programmo su di un Mac.

Grazie in anticipo.



--- Ultima modifica di lm in data 2016-02-28 16:17:54 ---
Sto utilizzando tkinter per un piccolo programmino con python 3. Vorrei fare in modo di schiacciare il tasto 'invio' su di un 'Entry' per attivare il pulsante 'invia' collegato. Sapreste consigliarmi su come fare?
Uso l'IDLE e programmo su di un Mac.

Grazie in anticipo.



--- Ultima modifica di lm in data 2016-02-28 16:17:54 ---
Potresti gentilmente,postare un po di codice da Te editato?


Questo dovrebbe essere quello che cerchi:
self.puls1.bind("<Return>", self.puls1Press)
dove self.puls1 è il widget che emette il seganle,
<Return> 
è il nome dell'evento
self.puls1Press
è la funzione/azione che vuoi che svolga.


--- Ultima modifica di Orsogrizzly in data 2016-02-29 10:26:14 ---
Ecco il codice da me editato, anche se il bottone non va... Credo che lo toglierò (il bottone 'invia')

from tkinter import *

finestra = Tk()

def stampa():
testo_generato = contenuto.get()
testo_stampato = Label(text=testo_generato, fg='blue', bg='orange', font=('Courier', 12)).pack()


contenuto= StringVar()
casella_testo = Entry(finestra, textvariable=contenuto).pack(fill=X)
bottone = Button(text='INVIA', command=stampa).pack(fill=X)
finestra.bind("<Return>", stampa)


finestra.mainloop()



Vorrei anche chiedervi se è possibile mettere una barra di scorrimento sul bordo destro della pagina.

Grazie mille :) :) :)


--- Ultima modifica di lm in data 2016-03-05 19:46:05 ---
Presupponendo di aver capito cosa vuoi fare con return:

si apre una finestra con dentro una Entry e un bottone, il bottone non è abilitato al momento dell'apertura della finestra,
scrivi del testo nel ' Entry dai RETURN e si attiva il bottone,
schiacci sul bottone e ti stampa quello che avevi scritto sull' Entry

#!/usr/bin/env python
#coding:utf-8
"""
  Author:   --<>
  Purpose: 
  Created: 05/03/2016
"""

from Tkinter import *

########################################################################
class MiaFinestra(Frame):
	""""""

	#----------------------------------------------------------------------
	def __init__(self):
		"""Constructor"""
		Frame.__init__(self)
		self.master.title("Mia finestra")
		self.v = StringVar()
		self.casella = Entry(textvariable = self.v) #.pack()
		self.casella.bind("<Return>",self.abilitaBottone)
		self.casella.pack()
		self.bottone = Button(text = 'INVIA', state=DISABLED, command = self.stampa)
		self.bottone.pack()
    
	#----------------------------------------------------------------------
	def abilitaBottone(self, evento):
		""""""
		self.bottone.configure(state = "normal")
		print 'ho abilitato il pulsante INVIA PREMENDO IL TASTO DI RETURN'
	#----------------------------------------------------------------------
	def getText(self):
		"""estraggo il testo inserito nella variabile self.v
		che non è altro che il testo che viene inserito nella Entry"""
		a = self.v.get()
		return a
	#----------------------------------------------------------------------
	def stampa(self):
		""""""
		print 'ho schiacciato il pulsante invia dopo aver inserito '\
		'del testo nel widget Entry'
		print "IL TESTO INSERITO E' ", self.getText()

if __name__ == '__main__':
	
	main = MiaFinestra()
	main.mainloop()
	

ora cerca un o di informazioni sulla barra laterale che vuoi inserire, fai qualche esperimento e posta il codice dopo di che cercherò di aiutarti ancora. :fingers-crossed: :D :devil: :py: :birrame:
Scusami ho dimenticato che tu utilizzi python 3.xx, questo lo costruito con python 2.7.8, per eseguirlo correttamente con python 3.xx,
modifica:
from Tkinter import *
con:
from tkinter import *
e le stringhe di print mettile all'interno delle parentesi:
print 'ho schiacciato il pulsante invia dopo aver inserito '\
		'del testo nel widget Entry'
come da esempio:
print ('ho schiacciato il pulsante invia dopo aver inserito '\
		'del testo nel widget Entry')



--- Ultima modifica di Orsogrizzly in data 2016-03-05 22:21:41 ---
Ciao grazie mille, il tuo codice è fantastico volevo anche stampare direttamente sulla pagina così ho modificato il codice come lo vedrai di seguito. La barra laterale infatti serviva ad evitare che aggiunti troppi layout come succede adesso non si possano visualizzare i più recenti. Dopo qualche ricerca su Internet ho trovato la Scrollbar che da quanto ho notato viene solamente usata con le Listbox... Così ho deciso di adeguarmi...
Ecco il codice com'è adesso, ma il risultato non è un granché estetico, c'è qualche altro modo?





from tkinter import *


########################################################################

class MiaFinestra(Frame):
#----------------------------------------------------------------------
def __init__(self):
	"""Constructor"""
	Frame.__init__(self)
		self.master.title("Mia finestra")
		self.v = StringVar()
		self.casella = Entry(textvariable = self.v) #.pack()
		self.casella.bind("<Return>",self.abilitaBottone)
		self.casella.pack()
		self.bottone = Button(text = 'INVIA', state=DISABLED, command = self.stampa)
		self.bottone.pack()
		self.listbox = Listbox()
		self.listbox.pack(fill=BOTH, expand=1)
		self.scrollbar = Scrollbar(self.listbox, orient=VERTICAL)
		self.scrollbar.pack(side=RIGHT, fill=Y)
		self.scrollbar.config(command=self.listbox.yview)
#Nelle ultime cinque righe ho inserito la listbox e la scrollbar laterale sulla destra

#----------------------------------------------------------------------
	def abilitaBottone(self, evento):
		self.bottone.configure(state = "normal")
		print ('ho abilitato il pulsante INVIA PREMENDO IL TASTO DI RETURN')

	#----------------------------------------------------------------------
	def getText(self):
		"""estraggo il testo inserito nella variabile self.v
		che non è altro che il testo che viene inserito nella Entry"""
		a = self.v.get()
		return a

	#----------------------------------------------------------------------
	def stampa(self):

		print('ho schiacciato il pulsante invia dopo aver inserito '\
		'del testo nel widget Entry')
		print ("IL TESTO INSERITO E' ", self.getText())
		testo=self.getText()

		self.listbox.insert(END, testo) #Qui ho aggiunto gli elementi stampati nella listbox

if __name__ == '__main__':
	main = MiaFinestra()
	main.mainloop()


L'ultima cosa che volevo chiederti è perché di solito si definisce una Classe per utilizzare Tkinter
Grazie ancora :) :D :py:


--- Ultima modifica di lm in data 2016-03-06 10:23:38 ---
ho trovato la Scrollbar che da quanto ho notato viene solamente usata con le Listbox...
questo non è vero si può usare anche in altre circostanze,
ma il risultato non è un granché estetico, c'è qualche altro modo?
dovresti specificare meglio in che senso non è estetico cioè, non ti piace la distribuzione dei vari widget ( Entry, Button, Listbox ) nella finestra (Frame) 'MiaFinestra' o non ti piace la listbox o altro?
L'ultima cosa che volevo chiederti è perché di solito si definisce una Classe per utilizzare Tkinter
qui entriamo in un discorso che potrebbe rivelarsi lungo,
intanto, non l'ho fatto fin ora, ed e giunto il momento di farlo, non ho mai affermato o detto che il sottoscritto non è un programmatore,sono un autodidatta con tutto quello che ne consegue quindi la risposta che ti darò molto probabilmente non rispecchia parzialmente o completamente la realtà della cosa vista da parte di un programmatore.
Per risponderti, senza che tu me ne voglia o ti offenda parto ponendoti una domanda,
"Non ti sembra che il codice scritto sopra se creato fine a se stesso si di poco utilizzo? quasi da rasentare la stupidità?
Nel senso che ideologicamente non ha senso creare un Programma che utilizza una Entry e un bottone per Riscrivere su una Listbox (appartenete alla stessa finestra) il testo inserito nel' Entry!!! casomai, sempre idealmente,dovra inserire il testo suddetto in una Listbox appartenete e opportunamente visualizzata in un altra finestra. Questo significherebbe, come logico pensare che il tuo Programma cresce (in stesura di codice) come la sua interfaccia grafica"
Tutto questo per dirti che se crei la tua interfaccia grafica in Tkinter (ma anche con altre librerie grafiche) utilizzando le classi procedendo nel' implementazione del programma interfaccia compresa prima o poi potresti aver bisogno di riutilizzare lo stesso codice per espandere con altri metodi o ereditare il comportamento della classe in altra situazione o addirittura riutilizzare la classe che hai creato in altro programma che scriverai in futuro che però preveda una finestra come quella creata sopra semplicemente importando il modulo(file) nel nuovo programma(codice) che andrai a fare.
Il consiglio, per capire il concetto/i che ho tentato confusamente di spiegarti,
è Vai a dare un'occhiata alla programmazione orientata agli oggetti OOP.
Anche se studiare OOP con interfaccia grafica non è probabilmente la miglior idea, ma sicuramente vedrai che la cosa e collegata.
Ti prego di scusarmi per la lungaggine e per la poca chiarezza. ;) :) :dont-know: :confused: :angel: :angel:

Opss. mi sono fatto prendere la mano dei discorsi e quasi dimenticavo:
Ciao grazie mille, il tuo codice è fantastico
:py: :P Ti ringrazio io per il complimento :P :py: :batti5: :fingers-crossed: :fingers-crossed: :) :)


--- Ultima modifica di Orsogrizzly in data 2016-03-06 22:34:11 ---
questo non è vero si può usare anche in altre circostanze
Sapresti indirizzarmi al sito in cui viene spiegato o scrivermi come fare?
dovresti specificare meglio in che senso non è estetico cioè, non ti piace la distribuzione dei vari widget ( Entry, Button, Listbox ) nella finestra (Frame) 'MiaFinestra' o non ti piace la listbox o altro?
Il fatto è che è poco funzionale utilizzare una listbox volendo far comparire anche altri oggetti sulla pagina creando un programma più complesso.
Per risponderti, senza che tu me ne voglia o ti offenda parto ponendoti una domanda,
"Non ti sembra che il codice scritto sopra se creato fine a se stesso si di poco utilizzo? quasi da rasentare la stupidità?
Nel senso che ideologicamente non ha senso creare un Programma che utilizza una Entry e un bottone per Riscrivere su una Listbox (appartenete alla stessa finestra) il testo inserito nel' Entry!!! casomai, sempre idealmente,dovra inserire il testo suddetto in una Listbox appartenete e opportunamente visualizzata in un altra finestra. Questo significherebbe, come logico pensare che il tuo Programma cresce (in stesura di codice) come la sua interfaccia grafica"
In realtà il fatto che io abbia chiesto queste spiegazioni è semplicemente che mi servono per implementarle in un altro programma che sta contemporaneamente crescendo e, visto che non aveva senso caricare l'intero file facendo domande su di esso, ho ritenuto più opportuno ricrearne un altro che avesse funzioni simili. Infatti il programma con l'interfaccia che sto sviluppando parallelamente prende ciò che viene scritto nell'Entry e nella pagina stessa "reagisce" a ciò che viene scritto, il fatto che voglia far nuovamente comparire il testo sulla stessa finestra serve solo per coerenza. :)
Vai a dare un'occhiata alla programmazione orientata agli oggetti OOP.
Anche se studiare OOP con interfaccia grafica non è probabilmente la miglior idea, ma sicuramente vedrai che la cosa e collegata.

Lo farò sicuramente anche se una parte basilare di nozioni le ho già imparate.



Grazie mille ancora per tutto... :D :py:


--- Ultima modifica di lm in data 2016-03-11 16:48:42 ---


Pagina: 1



Esegui il login per scrivere una risposta.