[GTK] radio buttons


#1

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.


#2

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


#3

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.


#4

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


#5

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?