如何在窗口中调整窗口小部件的大小
问题描述:
首先要做的事情,我希望你做得很好。现在,我正在用C语言与GTK做一个游戏,我正在尝试调整棋盘所在的Box的大小,我不确定我应该调整大小的是它所在的框或按钮的表格本身。如何在窗口中调整窗口小部件的大小
我想调整它的大小以便用户友好,请记住我是GTK的noob。
#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();
}
答
这是不是很清楚你想表达什么,如果你的意思是,你已经添加按钮的表并不显得扩大在隔板之间,以适应则是由于实际上,在创建cajaH
时,您已指定间距为25像素。尝试将其更改为较小的不同值或0,看看你是否得到你想要的。由于您正在使用默认包装表&使用gtk_container_add
包装将扩大&契合。
另外,作为您使用GtkHBox
& GtkVBox
gtk_box_pack_start
& gtk_box_pack_end
会给你再布局利用gtk_container_add
一个更大的控制权。有关信息,请参阅this question。
使用gtk_container_set_focus_vadjustment
时,您需要使用gtk_adjustment_new
创建新的GtkAdjustment
。使用GTK_ADJUSTMENT
进行类型转换不是实现它的方法!
希望这有助于!