2012-01-11 32 views
3

ここでのチュートリアルhttp://developer.gnome.org/gtk-tutorial/2.90/x542.html は、ラジオボタンの設定方法を示しますが、ラジオボタンの使い方を無視しています。GTK +どのラジオボタンが選択されているかはどのようにして確認できますか?

どのラジオボタンが選択されているかをどのようにして見つけることができますか?

私のソリューション:

rbutton1 = gtk_radio_button_new_with_label(NULL, "button1"); 
gtk_box_pack_start(GTK_BOX(rbutton_box), rbutton1, TRUE, TRUE, 0); 

rbuttonGroup = gtk_radio_button_get_group(GTK_RADIO_BUTTON(rbutton1)); /*not sure what I'd use this line for currently though*/ 
rbutton2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(rbutton1), "button 2"); 
gtk_box_pack_start(GTK_BOX(rbutton_box), rbutton2, TRUE, TRUE, 0); 

rbutton3 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(rbutton1), "button 3"); 
gtk_box_pack_start(GTK_BOX(rbutton_box), rbutton3, TRUE, TRUE, 0); 

そして、ラジオボタンがこの方法で選択されているあなたを伝える変数を更新:

はとラジオボタンを初期化

 void checkRadioButtons() 
{ 
    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutton1))==TRUE) selectedRadioButton =1; 
    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutton2))==TRUE) selectedRadioButton =2; 
    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutton3))==TRUE) selectedRadioButton =3; 
} 

答えて

0

あなたが接続できます代わりにGtkToggleButton::toggled信号に送信してください。関連するコールバックでは、変数を更新することができます。 gtk_radio_button_get_groupへのコールについては、参照しているチュートリアルで指定されているように、gtk_radio_button_new_with_label_with_widgetの代わりにgtk_radio_button_new_with_labelを呼び出す必要があります。 、あなたはいけない場合

def radioButtonSelected(self, button, currentSeverity): 
    # proceed with the task 
    # as you can see, button is passed by as argument by the event handler 
    # and you can, for example, get the button label : 
    labelReadFromButton = button.getLabel() 
0

はのがボタンのセリエAを作成してみましょう:

for severity in levels: 
    radio = gtk.RadioButton(group=radioButtons, label=severity) 
    if severity == actualLevel: 
     radio.set_active(True) 
    hBox.pack_start(radio, True, True, 3) 
    radio.connect('toggled', self.radioButtonSelected, severity) 

をし、すべてのボタンが同じハンドラに接続されていますまだ接続する必要がありますが、その読みやすいです:

Enum RadioValues { A, B, C, none }; 

RadioValues values = RadioValues.none; // only needed if you dont have an initially selected radio button 

MyConstructor() 
{ 
    Build(); 
    // asumming you have 3 radio buttons: radioA, radioB, radioC: 
    radioA.Toggled += (sender,e) => values = RadioValues.A; 
    radioB.Toggled += (sender,e) => values = RadioValues.B; 
    radioC.Toggled += (sender,e) => values = RadioValues.C; 

} 

とthそれを処理する方法はありません。あなたはそれだけで自分自身を制限する必要はありません。さらにフレックスが必要な場合は無名関数を使うこともできます。残念なことに、単純な.Checkedプロパティを提供しませんでした。私の次の提案は、ラジオボタン自体をオーバーライドし、トグル状態が変更されたときCheckedプロパティをチェーンし、MFC、Qt、Winformsなどの他のフレームワークをエミュレートすることです。

PS:単純化のために定型コードを残しました。これは答えを少し混乱させる可能性があります。実際にコンストラクタを適切に呼び出すことができるかどうかをデモする必要はありません:

0

使用ラムダ式は、周りの迷惑な方法を台無しにしたい:

1

それをやる。

GtkRadioButton * radio_button; 
GtkRadioButton * radio_button1; 
GtkRadioButton * radio_button2; 
... 
GSList * tmp_list = gtk_radio_button_get_group (radio_button);//Get the group of them. 
GtkToggleButton *tmp_button = NULL;//Create a temp toggle button. 

while (tmp_list)//As long as we didn't reach the end of the group. 
{ 
    tmp_button = tmp_list->data;//Get one of the buttons in the group. 
    tmp_list = tmp_list->next;//Next time we're going to check this one. 

    if (gtk_toggle_button_get_active(tmp_button))//Is this the one active? 
    break;//Yes. 

    tmp_button = NULL;//We've enumerated all of them, and none of them is active. 
} 
//Here. tmp_button holds the active one. NULL if none of them is active. 

ディスカッションhereを参照してください。 この機能を追加するかどうかわかりません(思われません)。

0

Googleはパイソン/ PyGTKを/ pygtk3検索のためにここに私をもたらしたので、私は、私はPyGTKのソリューションを投稿することをその大丈夫を願っています:

def _resolve_radio(self, master_radio): 
    active = next((
     radio for radio in 
     master_radio.get_group() 
     if radio.get_active() 
    )) 
    return active 

これが唯一のであるべき(最初を返すために発電機を使用しています)アクティブなアクティブなラジオボックスです。ここで

0

は、私はそれをやってお勧め方法は次のとおりです。

void radio_button_selected (GtkWidget *widget, gpointer data) 
{ 
    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) 
    { 
     GSLIST *group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget)); 
     g_print ("Index = %i%\n", g_slist_index (group, widget)); 
    } 
} 
関連する問題