切换按钮

切换按钮是一种点击后保持“按下”状态的按钮。

再次点击它将使切换按钮返回到其正常状态。

static void
on_toggle (GtkToggleButton *toggle,
           gpointer user_data)
{
  if (gtk_toggle_button_get_active (toggle))
    gtk_button_set_label (GTK_BUTTON (toggle), "Goodbye");
  else
    gtk_button_set_label (GTK_BUTTON (toggle), "Hello");
}

// ...

GtkWidget *toggle = gtk_toggle_button_new_with_label ("Hello");

g_signal_connect (toggle, "toggled", G_CALLBACK (on_toggle), NULL);

程序化切换

您可以使用 GtkToggleButton:active 属性来程序化地更改切换按钮的状态。

GtkWidget *toggle = gtk_toggle_button_new_with_label ("Hello");

gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), TRUE);

更改 GtkToggleButton:active 属性还会发出 GtkToggleButton::toggled 信号;如果您正在程序化地更改切换按钮的状态,并且希望避免运行您自己的信号回调,则应在调用 set_active() 之前阻止处理程序

// "toggle" and "on_toggle" are defined elsewhere
g_signal_handlers_block_by_func (toggle, on_toggle, NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), TRUE);
g_signal_handlers_unblock_by_func (toggle, on_toggle, NULL);

分组按钮

切换按钮可以组合在一起,形成互斥组:一次只能切换一个按钮,并且切换另一个按钮将关闭当前已切换的按钮。

GtkWidget *live = gtk_toggle_button_new_with_label ("Live");
GtkWidget *laugh = gtk_toggle_button_new_with_label ("Laugh");
GtkWidget *love = gtk_toggle_button_new_with_label ("Love");

gtk_toggle_button_set_group (GTK_TOGGLE_BUTTON (laugh),
                             GTK_TOGGLE_BUTTON (live));
gtk_toggle_button_set_group (GTK_TOGGLE_BUTTON (love),
                             GTK_TOGGLE_BUTTON (live));

组件的常用方法

  • 如果您想为切换按钮添加助记符快捷方式,可以使用 new_with_mnemonic() 构造函数。

API 参考

在示例中,我们使用了以下类