Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Sto creando in programma ad interfaccia grafica (GUI) con la classe Tk di ruby.
Ho un problema ad associare l'evento click del mouse ad un' istanza TkButton.
Ecco il codice:
Codice sorgente - presumibilmente Ruby
require'tk'
class App
def initialize
@radice=TkRoot.new()do
title "Esempio"
width 230
height 120
end
@btnComando=TkButton.new(@radice)do
command 'miaFunzione'
place('x'=>10, 'y'=> 10)
end
@btnComando['text']='Comando'
@textRisultato=TkText.new(@radice)
@textRisultato['width']=15
@textRisultato['height']=3
@textRisultato.place('x'=>10, 'y'=> 45)
@radice.mainloop()
end
def miaFunzione
@textRisultato.insert'end', 'Click !'
end
end
finestra=App.new
La cosa che non riesco a capire è che non riesco a collegare una funzione interna alla classe a @btnComando
Ultima modifica effettuata da Poggi Marco il 16/01/2017 alle 21:55
Solitamente direi che usare OOP in questo caso non e' necessario, la modularita' viene gia' raggiunta separando l'interfaccia in un modulo separato e dovresti definire i tuoi metodi nello scope globale del file (quindi semplicemente rimuovi la classe App), ma visto che con Ruby si puo' fare di tutto...
Codice sorgente - presumibilmente Ruby
require'tk'
class App
def initialize
this = self
@radice=TkRoot.new()do
title "Esempio"
width 230
height 120
end
@btnComando=TkButton.new(@radice)do
command proc{ this.miaFunzione}
place('x'=>10, 'y'=> 10)
end
@btnComando['text']='Comando'
@textRisultato=TkText.new(@radice)
@textRisultato['width']=15
@textRisultato['height']=3
@textRisultato.place('x'=>10, 'y'=> 45)
@radice.mainloop()
end
def miaFunzione
@textRisultato.insert'end', 'Click !'
end
end
finestra=App.new
In pratica salvo l'istanza della classe (self) in una variabile (this), dopodiche' uso creo un oggetto Proc https://ruby-doc.org/core-2.2.0/Proc.html per salvare lo scope (rendere accessibile this quando command viene invocato da tk).