Forum: Italian Ruby user group [GTK] radio buttons

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Cozza A. (Guest)
on 2008-12-13 13:44
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.
Luigi Maselli -. (Guest)
on 2008-12-14 00:17
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
Cozza A. (Guest)
on 2008-12-14 11:53
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

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.
Daneel O. (Guest)
on 2008-12-15 10:23
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?
Luigi Maselli -. (Guest)
on 2008-12-15 15:32
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
This topic is locked and can not be replied to.