# \[GTK\] radio buttons

**URL:** <https://www.ruby-forum.com/t/gtk-radio-buttons/155556>\
**Category:** IT\
**Created:** [December 13, 2008, 12:44pm UTC](https://www.ruby-forum.com/t/gtk-radio-buttons/155556 "2008-12-13T12:44:26Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![cozzaamara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/3e96dc/32.png) [@cozzaamara](https://www.ruby-forum.com/u/cozzaamara)\
**Post date:** [December 13, 2008, 12:44pm UTC](https://www.ruby-forum.com/t/gtk-radio-buttons/155556/1 "2008-12-13T12:44:26Z")

</div>

Ciao a tutti,

stavo sperimentando i radio buttons con le GTK2 ma incontro un  
comportamento anomalo e non capisco l’errore.

buttonA = Gtk::RadioButton.new “Button A”  
buttonB = Gtk::RadioButton.new buttonA, “Button B”  
buttonC = Gtk::RadioButton.new buttonA, “Button C”

buttonA.signal\_connect “clicked” do  
puts “Pulsante A”  
end

buttonB.signal\_connect “clicked” do  
puts “Pulsante B”  
end

buttonC.signal\_connect “clicked” do  
puts “Pulsante C”  
end

In pratica creo tre pulsanti di uno stesso gruppo (quello del pulsante A  
creato come primo) a cui associo un semplice listener che mi stampa in  
shell il nome del pulsante premuto.

Il problema Ã¨ che ho un doppio output, ovvero quello del pulsante  
premuto e quello del pulsante “precedentemente premuto”.

Es:  
Clicco su C (avendo prima cliccato su B), ottengo:  
“Pulsante B”  
“Pulsante C”

Clicco su A (avendo prima cliccato su C), ottengo:  
“Pulsante C”  
“Pulsante A”

ecc.

Potete aiutarmi? Grazie.

---

<div class="post-metadata">

**Author:** ![cozzaamara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/3e96dc/32.png) [@cozzaamara](https://www.ruby-forum.com/u/cozzaamara)\
**Post date:** [December 13, 2008, 11:17pm UTC](https://www.ruby-forum.com/t/gtk-radio-buttons/155556/2 "2008-12-13T23:17:55Z")

</div>

Cozza A. wrote:

> buttonA.signal\_connect “clicked” do  
> puts “Pulsante A”  
> end
> 
> buttonB.signal\_connect “clicked” do  
> puts “Pulsante B”  
> end
> 
> buttonC.signal\_connect “clicked” do  
> puts “Pulsante C”  
> end

Prova cosÃ¬:  
buttonA.signal\_connect “clicked” do |obj|  
puts ‘a’ if obj.active?  
end

buttonB.signal\_connect “clicked” do |obj|  
puts ‘b’ if obj.active?  
end

buttonC.signal\_connect “clicked” do |obj|  
puts ‘c’ if obj.active?  
end

Se ti servono altri esempi qui ce ne qualcun’altro  
[http://www.lilik.it/~mirko/Ruby-GNOME2/00-Presentazione.html](http://www.lilik.it/~mirko/Ruby-GNOME2/00-Presentazione.html)

---

<div class="post-metadata">

**Author:** ![cozzaamara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/3e96dc/32.png) [@cozzaamara](https://www.ruby-forum.com/u/cozzaamara)\
**Post date:** [December 14, 2008, 10:53am UTC](https://www.ruby-forum.com/t/gtk-radio-buttons/155556/3 "2008-12-14T10:53:33Z")

</div>

Luigi M. wrote:

> Cozza A. wrote:
> 
> > buttonA.signal\_connect “clicked” do  
> > puts “Pulsante A”  
> > end
> > 
> > buttonB.signal\_connect “clicked” do  
> > puts “Pulsante B”  
> > end
> > 
> > buttonC.signal\_connect “clicked” do  
> > puts “Pulsante C”  
> > end
> 
> Prova cosÃ¬:  
> buttonA.signal\_connect “clicked” do |obj|  
> puts ‘a’ if obj.active?  
> end
> 
> buttonB.signal\_connect “clicked” do |obj|  
> puts ‘b’ if obj.active?  
> end
> 
> buttonC.signal\_connect “clicked” do |obj|  
> puts ‘c’ if obj.active?  
> end
> 
> Se ti servono altri esempi qui ce ne qualcun’altro  
> [http://www.lilik.it/~mirko/Ruby-GNOME2/00-Presentazione.html](http://www.lilik.it/~mirko/Ruby-GNOME2/00-Presentazione.html)

Ti ringrazio.

Ma come mai devo eseguire il controllo sull’active?  
Forse perchÃ¨ il click viene interpretato come un toggle e quindi il  
listener si attiva sia sul pulsante che guadagna il focus sia su quello  
che lo perde?  
In quel caso perÃ² non dovrebbe essere \>\>signal\_connect(“toggled”)?\<\<

Grazie ancora.

---

<div class="post-metadata">

**Author:** ![cozzaamara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/3e96dc/32.png) [@cozzaamara](https://www.ruby-forum.com/u/cozzaamara)\
**Post date:** [December 15, 2008, 2:32pm UTC](https://www.ruby-forum.com/t/gtk-radio-buttons/155556/4 "2008-12-15T14:32:51Z")

</div>

clicked o toggled fare che abbiano lo stesso effetto.  
Ho chiesto, per curiositÃ , anche su #ruby-gnome2 @ freenode e pare che  
questo hack di active? sia necessario

---

<div class="post-metadata">

**Author:** ![cozzaamara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/3e96dc/32.png) [@cozzaamara](https://www.ruby-forum.com/u/cozzaamara)\
**Post date:** [December 15, 2008, 9:23am UTC](https://www.ruby-forum.com/t/gtk-radio-buttons/155556/5 "2008-12-15T09:23:05Z")

</div>

Cozza A. wrote:

> […]  
> Ti ringrazio.
> 
> Ma come mai devo eseguire il controllo sull’active?  
> Forse perchÃ¨ il click viene interpretato come un toggle e quindi il  
> listener si attiva sia sul pulsante che guadagna il focus sia su quello  
> che lo perde?  
> In quel caso perÃ² non dovrebbe essere \>\>signal\_connect(“toggled”)?\<\<
> 
> Grazie ancora.

Io ho fatto una cosa del genere nel mio accrocchio:

tipo1 = Gtk::RadioButton.new(“Dato 1 (dato1)”)  
tipo1.active=(true)  
tipo=“dato1”  
tipo1.signal\_connect(“toggled”) {  
if tipo1.active?  
tipo=“dato1”  
end  
}  
box4.pack\_start(tipo1, false, false, 5)  
tipo2 = Gtk::RadioButton.new(tipo1, “Dato 2 (dato2)”)  
tipo2.signal\_connect(“toggled”) {  
if tipo2.active?  
tipo=“dato2”  
end  
}  
box4.pack\_start(tipo2, false, false, 5)  
tipo3 = Gtk::RadioButton.new(tipo1, “Dato 3 (dato3)”)  
tipo3.signal\_connect(“toggled”) {  
if tipo3.active?  
tipo=“dato3”  
end  
}  
box4.pack\_start(tipo3, false, false, 5)

Se non tiro scemate, il “toggled” intercetta il segnale di assegnamento  
del valore (non so come dirlo, il click o l’invio sul pulsante,  
insomma), mentre l’“active” serve solo a verificare quale Ã¨ selezionato.

Tutto giusto?
