没事儿找事儿————gtk学习(盒状容器)
我们已经知道容器有只能容纳一个控件的容器和能容纳多个控件的容器。接下来就学学盒状容器上篇中我们在窗体中加了一个按钮,当你再创建一个按钮加入窗体时编译是没有错误的但是在运 行的过程中就会报错 Gtk-WARNING **: Attempting to add a widget with type GtkButton to a GtkWindow, but as a GtkBin subclass a
我们已经知道容器有只能容纳一个控件的容器和能容纳多个控件的容器。接下来就学学盒状容器上篇中我们在窗体中加了一个按钮,当你再创建一个按钮加入窗体时编译是没有错误的但是在运 行的过程中就会报错 Gtk-WARNING **: Attempting to add a widget with type GtkButton to a GtkWindow, but as a GtkBin subclass a GtkWindow can only contain one widget at a time; it already contains a widget of type GtkButton 这是因为窗体只能容纳一个控件。如何容纳多个控件呢,估计你也想到了再创建一个能容纳多个控件的容器,之后把这个容器加到窗体上就行了。gtk中能容纳多个控件的容器有盒状容器(GtkBox)、格状容器(GtkTable)、按钮盒(GtkButtonBox)、分割面板(GtkPanel)、固定布局(GtkFixed)、工具栏(GtkToolbar)等。其中最常用的就是盒状容器和格状容器。当然容器中可以容纳容器。
盒状容器:一种按一定顺序和方向紧密排列多个按钮的容器。在盒状容器基础上又有竖向盒状容器(GtkVBox)和横向盒状容器(GtkHBox)两者除了创建和排列按钮的方式不一样,使用的方式是一样的。
#include<gtk/gtk.h>
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *button1,*button2,*button3;
GtkWidget *box;
gchar *str = "盒状容器";
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "盒状容器");
gtk_window_set_default_size(GTK_WINDOW(window),400,300);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window),40);
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
box = gtk_hbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(window),box);
button1 = gtk_button_new_with_label("我是按钮1");
gtk_box_pack_start(GTK_BOX(box),button1,TRUE,TRUE,3);
button2 = gtk_button_new_with_label("我是按钮2");
gtk_box_pack_start(GTK_BOX(box),button2,FALSE,FALSE,3);
button3 = gtk_button_new_with_label("我是按钮3");
gtk_box_pack_start(GTK_BOX(box),button3,FALSE,FALSE,3);
gtk_widget_show_all(window);
gtk_main ();
return 0;
}
用gtk_hbox_new创建横向盒状容器,用gtk_vbox_new创建纵向盒状容器,两个函数都有两个参数,第一个参数布尔型的,表示容器内的控件是否均匀排放。第二个参数是整型表示容器中控件的间隔,单位是像素。
向容器中添加控件可以用gtk_container_add函数,但是每次只能添加一个控件,gtk_box_pack_*系列函数可以添加并排列控件,它的同类还有gtk_box_pack_start、gtk_box_pack_end、gtk_box_pack_start_defaults和gtk_box_pack_end_defaultsgtk_box_pack_start和gtk_box_pack_end 分别表示顺序从前到后依次排列控件和从后到前依次排列控件。这两个函数都有5个参数,GTK_BOX(box)要容纳控件的容器;button,被容纳的控件;是否扩展,是否添充和与前一控件的间隔。
更多推荐
所有评论(0)