0

4 つのボタンを含む gtk_window があります。
これらのボタンの 1 つは、ファイル選択ダイアログ (別の機能) を開きます。ファイルが選択されると、3 gtk_entry (この機能) を含むダイアログが表示されます。

static void function_with_3_gtk_entry (gchar *message, gpointer mainwin){
   GtkWidget *dialog, *label, *content_area, *entry1, *entry2, *entry3;
   /* Create the widgets */
   dialog = gtk_dialog_new_with_buttons ("Nome File", mainwin, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_NONE, NULL);
   content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
   entry1 = gtk_entry_new();
   entry2 = gtk_entry_new();
   entry3 = gtk_entry_new();
   gtk_widget_set_size_request(dialog, 250, 200);

   /* Ensure that the dialog box is destroyed when the user responds */
   g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);

   /* Add the label, and show everything we've added to the dialog */
   gtk_container_add (GTK_CONTAINER (content_area), entry1);
   gtk_container_add (GTK_CONTAINER (content_area), entry2);
   gtk_container_add (GTK_CONTAINER (content_area), entry3);
   gtk_widget_show_all (dialog);
}

私の質問は次のとおりです。

  1. gtk_dialog の代わりに、この関数に別の gtk_window を使用できますか?
  2. ダイアログのサイズを変更できないように設定するにはどうすればよいですか?
4

1 に答える 1

3

以下のコードスニペットには2つの関数があります。

  • create_dialog()は、要求に応じてサイズを変更できないダイアログを作成します。

  • create_window()は、要求に応じて、関数内にウィンドウを作成します。

お役に立てれば。

#include <gtk/gtk.h>


/* Create a dialog, which cannot be resized by the user. */

void create_dialog(GtkWidget *button, gpointer window) {
    GtkWidget *dialog, *label, *content_area;

    /* New label for dialog content */
    label = gtk_label_new("This is a dialog!");

    /* Make a new dialog with an 'OK' button */
    dialog = gtk_dialog_new_with_buttons("This is a dialog, which (shouldn't | can't) be resized!", window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_NONE, NULL);

    /* Add label to dialog */
    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
    gtk_container_add(GTK_CONTAINER(content_area), label);

    /* Destroy dialog properly */
    g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), dialog);

    /* Set dialog to not resize. */
    gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);

    gtk_widget_show_all(dialog);
}

/* Create a window, while in a function! */

void create_window(GtkWidget *button, gpointer window) {
    GtkWidget *new_window, *label;

    /*New label for dialog content */
    label = gtk_label_new("This is a window, created in a function!");

    /* Create new window */    
    new_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    /* Add label to window */
    gtk_container_add(GTK_CONTAINER(new_window), label);

    gtk_widget_show_all(new_window);
}

/* Boring implementation bits */
gint main(gint argc, char **argv) {

    /* Initialise GTK+ */
    gtk_init(&argc, &argv);

    GtkWidget *main_win, *dialog_button, *window_button, *button_container;

    /* Create a button, one for each function. */    
    dialog_button = gtk_button_new_with_label("Create dialog!");    
    window_button = gtk_button_new_with_label("Create window!");

    /* Pack buttons into a box. */
    button_container = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
    gtk_box_pack_start(GTK_BOX(button_container), dialog_button, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(button_container), window_button, FALSE, FALSE, 0);

    /* Connect signals to button callback functions */    
    g_signal_connect(dialog_button, "clicked", G_CALLBACK(create_dialog), main_win);
    g_signal_connect(window_button, "clicked", G_CALLBACK(create_window), main_win);

    /* Create a new window, show it, and run GTK+ */
    main_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(main_win, "destroy", G_CALLBACK(gtk_main_quit), NULL);
    gtk_container_add(GTK_CONTAINER(main_win), button_container);
    gtk_widget_show_all(main_win);
    gtk_main();
    return 0;
}
于 2013-01-12T00:32:14.527 に答える