0

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

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);
}

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

4

2 回答 2

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 ... */
}
于 2012-07-18T18:27:11.137 回答
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));
于 2012-07-20T14:54:31.503 回答