修改几个GTK按钮

时间:2013-04-30 08:49:43

标签: c button gtk

我有一个带12个按钮的键盘。 当按下某个按钮时,我希望所有按钮都能获得备用标签。 如何做到这一点,我想我需要为此目的使用数组?

1 个答案:

答案 0 :(得分:1)

是的,您需要将按钮存储在某种数据结构中,然后您需要将其用于信号处理程序回调。

通常最好将所有这些状态信息包装在一个结构中,因为它可以很好地扩展:

typedef struct {
  GtkWidget *keypad[12];
} GuiData;

然后只需在main()的早期实例化结构,然后传递它:

int main(void)
{
  GuiData gui;

 gui.keypad[0] = gtk_button_new_with_label("1");

 /* ... */

 g_signal_connect(G_OBJECT(some_widget), "clicked",
                  G_CALLBACK(cb_some_button_clicked), &gui);
}

注意&gui如何用于将指向GUI状态结构的指针传递给回调函数以处理“某个按钮”的点击。

在回调中,您可以访问键盘:

static void cb_some_button_clicked(GtkWidget *object, gpointer user)
{
  GuiData *guidata = user;

  gtk_button_set_label(GTK_LABEL(guidata->keypad[0], "4711");
}

我现在没有尝试过,但上面应该大致正确。