如何使用GTK文本框中输入的值?

时间:2012-07-18 18:05:30

标签: user-interface gtk

我有一个要求输入值的文本框。如何捕获此值并将其传递给另一个函数?

int main (int argc, char *argv[]) {
  GtkWidget *window,*table,*label,*entry;
  gtk_init(&argc, &argv);

  //Create the main window
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  initialize_window(window);

   /* Create a 1x2 table */
   table = gtk_table_new (1, 2, TRUE);
   gtk_container_add (GTK_CONTAINER (window), table);

  /* create a new label. */
  label = gtk_label_new ("Enter some text:" );
  //gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
  gtk_table_set_homogeneous(GTK_TABLE (table), TRUE);
  gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 0, 1);

  //create a text box
  //  entry = gtk_entry_new ();
  gtk_entry_set_max_length (GTK_ENTRY (entry),0);
  gtk_table_attach_defaults (GTK_TABLE (table), entry, 0, 1, 0, 1);
  gtk_widget_show_all(window);
}

现在我想使用这个值并将其传递给某个函数。

2 个答案:

答案 0 :(得分:2)

这样的事情应该有效。按下 Enter 键时,将调用entry_activated

static void entry_activated(GtkEntry *entry, gpointer user_data)
{
    int i;
    const gchar *entered = gtk_entry_get_text(entry);

    i = atoi(entered); // strtol() would be better, but this will work.

    g_message("Entry: %d", i);
}

int main (int argc, char *argv[]) {
    /* ... stuff ... */

    entry = gtk_entry_new();
    g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(entry_activated), NULL);

    /* ... stuff ... */
}

答案 1 :(得分:1)

作为旁注,如果你想要的只是一个数值,你最好首先使用GtkSpinButton。那么你就不必经历转换字符串的麻烦了。现在,用户仍然可以输入任何文本,并可能搞砸你的程序。

您可以使用

轻松创建SpinButton
GtkWidget *sbutton = gtk_spin_button_new_with_range(<minimum>, <maximum>, <step>);

然后连接到“value-changed”信号。然后用

提取值
gdouble value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(sbutton));