Как изменить размер виджета внутри окна - PullRequest
0 голосов
/ 24 ноября 2011

Перво-наперво, надеюсь, у тебя все отлично.Сейчас я делаю игру с GTK на C, я пытаюсь изменить размер Box, где находится доска, и я не уверен, что нужно изменить размер окна, в котором он находится, или таблицу кнопок.сам по себе.

Я хочу изменить его размер, чтобы он был удобным, имейте в виду, что я новичок с GTK.

#include<gtk/gtk.h>
#include<stdio.h>
#include<stdlib.h>

void boton_click (GtkWidget * widget, gpointer info);
void salida (Gtkdget * widget, gpointer info);
gboolean cierra_ventana (GtkWidget * widget, GdkEvent * event, gpointer info);

int
main (int argc, char *argv[])
{
    GtkWidget *ventana, *cajavertjugador1, *namejugador1, *imageplayer1,
    *framejugador1, *labeljugador1, *cajavertjugador2, *namejugador2,
    *imageplayer2, *framejugador2, *labeljugador2, *cajaH, *cajaboton,
    *separador, *separadorvjug1, *separadorvjug2, *cajatablero, *boton,
    *botoncancel, *tabla, *tablero[20][20];
    int i, j;
    gchar *arch1 = "troll.jpg";
    gchar *arch2 = "challenge.jpg";

    //***********************************1.-Initialize Enviroment
    gtk_init (&argc, &argv);

    //***************************************2.-Create Widgets and attributes
    imageplayer1 = gtk_image_new_from_file (arch1);
    imageplayer2 = gtk_image_new_from_file (arch2);
    tabla = gtk_table_new (20, 20, TRUE);
    ventana = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (ventana), "Pente");
    cajaH = gtk_hbox_new (FALSE, 25);
    cajavertjugador1 = gtk_vbox_new (FALSE, 0);
    cajatablero = gtk_hbox_new (TRUE, 500);
    cajavertjugador2 = gtk_vbox_new (TRUE, 5);
    cajaboton = gtk_hbox_new (TRUE, 5);
    boton = gtk_button_new_with_label ("Ok");
    botoncancel = gtk_button_new_with_label ("Cancel");
    separador = gtk_hseparator_new ();
    separadorvjug1 = gtk_vseparator_new ();
    separadorvjug2 = gtk_vseparator_new ();
    framejugador1 = gtk_frame_new ("Fichas Comidas");
    namejugador1 = gtk_label_new ("Variable Nombre Jugador1");
    labeljugador1 = gtk_label_new ("Aqui Imagenes de Las Fichas Comidas\n");
    gtk_label_set_justify (GTK_LABEL (labeljugador1), GTK_JUSTIFY_LEFT);
    framejugador2 = gtk_frame_new ("Fichas Comidas");
    namejugador2 = gtk_label_new ("Variable Nombre Jugador2");
    labeljugador2 = gtk_label_new ("Aqui Imagenes de Las Fichas Comidas\n");
    gtk_label_set_justify (GTK_LABEL (labeljugador1), GTK_JUSTIFY_LEFT);

    for (i = 0; i < 20; i++)
    {
        for (j = 0; j < 20; j++)
        {
            tablero[i][j] = gtk_button_new ();
        }
    }

    //**********************************3.Register Function Calls
    g_signal_connect (G_OBJECT (ventana), "delete_event",
            G_CALLBACK (cierra_ventana), NULL);
    g_signal_connect (G_OBJECT (ventana), "destroy", G_CALLBACK (salida), NULL);

    //***********************************4.-Hierarchy of Elements

    gtk_container_add (GTK_CONTAINER (ventana), cajaH);
    gtk_container_add (GTK_CONTAINER (cajaH), cajavertjugador1);
    gtk_container_add (GTK_CONTAINER (cajaH), separadorvjug1);
    gtk_container_add (GTK_CONTAINER (cajavertjugador1), namejugador1);
    gtk_container_add (GTK_CONTAINER (cajavertjugador1), imageplayer1);
    gtk_container_add (GTK_CONTAINER (framejugador1), labeljugador1);
    gtk_container_add (GTK_CONTAINER (cajavertjugador1), framejugador1);
    gtk_container_add (GTK_CONTAINER (cajatablero), tabla);
    gtk_container_set_focus_vadjustment (GTK_CONTAINER (cajatablero),
                       GTK_ADJUSTMENT (50));
    gtk_container_add (GTK_CONTAINER (cajaH), cajatablero);
    gtk_container_add (GTK_CONTAINER (cajaH), separadorvjug2);
    gtk_container_add (GTK_CONTAINER (cajavertjugador2), namejugador2);
    gtk_container_add (GTK_CONTAINER (cajavertjugador2), imageplayer2);
    gtk_container_add (GTK_CONTAINER (framejugador2), labeljugador2);
    gtk_container_add (GTK_CONTAINER (cajavertjugador2), framejugador2);
    gtk_container_add (GTK_CONTAINER (cajaH), cajavertjugador2);


    for (i = 0; i < 20; i++)
    {
        for (j = 0; j < 20; j++)
        {
            gtk_table_attach_defaults (GTK_TABLE (tabla), tablero[i][j], i,
                         i + 1, j, j + 1);
        }
    }
    //****************************5.Show the Widddgggeetss
    gtk_widget_show_all (ventana);

    //****************************6.Process Signals and Events
    gtk_main ();
    return 1;

}//main

gboolean
cierra_ventana (GtkWidget * widget, GdkEvent * event, gpointer info)
{
  return FALSE;
}

void
salida (GtkWidget * widget, gpointer info)
{
  gtk_main_quit ();
}

1 Ответ

1 голос
/ 24 ноября 2011

Не очень понятно, что вы пытаетесь сказать, если вы имеете в виду, что таблица, к которой вы добавили кнопки, не выглядит как расширенная для размещения между разделителями, то это происходит из-заДело в том, что при создании cajaH вы указали интервал 25 пикселей.Попробуйте изменить его на меньшее значение или 0 и посмотреть, получите ли вы то, что хотели.Поскольку вы используете упаковку по умолчанию для таблицы и используете gtk_container_add упаковка будет расширяться и соответствовать.
Также, как вы используете GtkHBox & GtkVBox gtk_box_pack_start & gtk_box_pack_end даст вам больший контроль над макетом, чем при использовании gtk_container_add.См. этот вопрос для получения информации.
При использовании gtk_container_set_focus_vadjustment вам необходимо создать новый GtkAdjustment, используя gtk_adjustment_new.Набирать 50 как GTK_ADJUSTMENT не так!
Надеюсь, это поможет!

...