Gtk 窗口,控件,设置(添加图片等)
2015-07-31 14:18
495 查看
1、关于窗口
设置全屏显示的几种办法:
让窗体尺寸不可调整,但是好像与全屏使用时有些问题,会自动地调整窗口的大小
常用的信号:
POPUP窗口也不错,而且不会在任务栏出现。
设置一个背景图片,对于整个窗体的,这还真需要点前期策划和艺术细胞,不然效果挺吓人。我还是喜欢后面的那一个办法。
对一部分区域设背景图,这个办法比较随意也简单,麻烦一点的地方是需要先做个计算,screen在前面有获得办法。
同时有说到一个图片缩放的办法。
2、关于按钮
3、关于entry
4、关于label
5、BOX参数小记
expand:TRUE,对所有TRUE参数打包进来的widget平均分配box中剩余的空间,但并不填充,仍保持widget原大小。
fill:TRUE,只有在expand为TRUE时有效,widget改变大小填充满其在box中占有的空间。
padding:widget与他后面的控件的间隔,pixel单位,最后一个widget将作为与box边缘的间隔。
box其乐无穷呀!
X、封装的代码
虽然丧失了一定的随意性,但是平常也就这些应用了。
Y、Widget的一些常用方法
Y.1、设定大小
Y.2、使其“变灰色”
Z、其他小技巧
Z.1 获得widget的上下左右
转载来自:/article/5581889.html
// 创建顶层窗体,后面有POPUP的 GtkWidget *main_window; main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); // 设置title文字,注意UTF8格式的文字转换,否则是乱码 gtk_window_set_title (GTK_WINDOW (main_window), g_locale_to_utf8("哈哈",-1,NULL,NULL,NULL)); // 设置窗体图标,用这条语句使所有窗体使用同一个图标,也有独立设置(GTK手册) gtk_window_set_default_icon_from_file( ICON_WNDICON, NULL); // 设置边框宽度,基本随意 gtk_container_set_border_width (GTK_CONTAINER (main_window), 8); // 设置模式窗口 gtk_window_set_modal(GTK_WINDOW (window), TRUE); // 让窗口总在最前 gtk_window_set_keep_above(GTK_WINDOW (window), TRUE); // 移动窗口位置 gtk_window_move(GTK_WINDOW (window), left, top); // 也是设置位置的,简单点 gtk_window_set_position(GTK_WINDOW (main_window), GTK_WIN_POS_CENTER); // 这个让叉叉无效 gtk_window_set_deletable(GTK_WINDOW (main_window), FALSE);
设置全屏显示的几种办法:
//a)简单一点就用这个。 gtk_window_maximize(GTK_WINDOW (main_window)); //b)下面这个有边框但都给挤到屏幕外面了 gtk_window_fullscreen( GTK_WINDOW(main_window)); //c)采用设置窗体大小等于screen大小的办法,就是麻烦点 GdkScreen *screen; screen = gtk_window_get_screen( GTK_WINDOW( main_window)); gtk_window_set_default_size( GTK_WINDOW( main_window), gdk_screen_get_width(screen), gdk_screen_get_height(screen));
让窗体尺寸不可调整,但是好像与全屏使用时有些问题,会自动地调整窗口的大小
gtk_window_set_resizable(GTK_WINDOW(main_window),FALSE); //或 gtk_window_set_policy(GTK_WINDOW(main_window), FALSE, FALSE, TRUE);
常用的信号:
//(a)点击叉叉 gint delete_event (GtkWidget *widget, GdkEvent *event, gpointer data) g_signal_connect (G_OBJECT (main_window), "delete_event", G_CALLBACK (delete_event), NULL); //(b)窗口变化,gboolean返回TRUE就行了,继续执行默认过程,同下 gboolean window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer user_data) g_signal_connect (G_OBJECT (main_window), "window_state_event", G_CALLBACK (window_state_event), main_window); //(c)点击别的窗口 gboolean focus_out_event(GtkWidget *widget, GdkEventFocus *event, gpointer user_data) gtk_signal_connect (GTK_OBJECT(window), "focus-out-event", GTK_SIGNAL_FUNC(popuptoolbar_fout_event), window);
POPUP窗口也不错,而且不会在任务栏出现。
window = gtk_window_new(GTK_WINDOW_POPUP); //用起来和这个差不多 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_decorated(GTK_WINDOW (window), FALSE);
设置一个背景图片,对于整个窗体的,这还真需要点前期策划和艺术细胞,不然效果挺吓人。我还是喜欢后面的那一个办法。
GdkPixbuf *pixbuf; GdkPixmap *pixmap; gtk_widget_set_app_paintable (main_window, TRUE); gtk_widget_realize (main_window); pixbuf = gdk_pixbuf_new_from_file (ICON_BGPIC, NULL); gdk_pixbuf_render_pixmap_and_mask (pixbuf, &pixmap, NULL, 128); gdk_window_set_back_pixmap (main_window->window, pixmap, FALSE); g_object_unref (pixbuf); g_object_unref (pixmap);
对一部分区域设背景图,这个办法比较随意也简单,麻烦一点的地方是需要先做个计算,screen在前面有获得办法。
同时有说到一个图片缩放的办法。
GdkPixbuf *pixbuf; image = gtk_image_new_from_file (ICON_BGPIC); pixbuf = gtk_image_get_pixbuf (GTK_IMAGE(image)); pixbuf = gdk_pixbuf_scale_simple(pixbuf, gdk_screen_get_width(screen) - 16, // 16: window border SHIFT gdk_screen_get_height(screen) - 140, // 140: height SHIFT GDK_INTERP_BILINEAR); gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf); // 我放到fixed里了,这个随便 gtk_fixed_put(GTK_FIXED(fixed), image, 0, 0);
2、关于按钮
// 建立按钮 GtkWidget * button; button = gtk_button_new (); // 简单一点的 button = gtk_button_new_with_label ("XX"); // 要产生那种能用键盘快捷键的按钮 button = gtk_button_new_with_mnemonic(g_locale_to_utf8("确定(_O)", -1,NULL,NULL,NULL)); // 要好看一点就用一个图片的 // 函数产生一个hbox,然后把botton当作容器放进去,GTK的widget几乎都是容器,所以这个函数还是比较有用的,在产生toolbar的时候也用到。 GtkWidget * create_imagetext_hbox(const char *text,const char *image_path) { GtkWidget *box; GtkWidget *label; GtkWidget *image; image = gtk_image_new_from_file (image_path); label = gtk_label_new (g_locale_to_utf8(text, -1,NULL,NULL,NULL)); box = gtk_hbox_new (FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (box), 2); gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 3); gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 3); gtk_widget_showall (box); return box; } GtkWidget * create_image_button(const char *text,const char *image_path) { GtkWidget * button; GtkWidget *box; box = create_imagetext_hbox(text, image_path); button = gtk_button_new (); gtk_container_add (GTK_CONTAINER (button), box); gtk_widget_show (button); return button; } // clicked信号定义 void user_function (GtkButton *button, gpointer user_data)
3、关于entry
// 建立entry GtkWidget *entry; entry = gtk_entry_new (); // 让entry显示**** gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); // 让entry直接响应回车 gtk_signal_connect (GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(enter_event), usrdata); // 读/写entry,读出的数据指针指向entry的widget内部,不能直接释放。 gchar *gtk_entry_get_text (GTK_ENTRY (entry)) gtk_entry_set_text (GTK_ENTRY (entry), "XX")
4、关于label
// 简单一点 label = gtk_label_new("XX"); // 让label接受键盘快捷键,并聚焦到某widget label = gtk_label_new_with_mnemonic (g_locale_to_utf8("输入(_I)", -1,NULL,NULL,NULL)); gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget); // 使用<span></span>控制显示 gtk_label_set_markup(GTK_LABEL(label), <span background='red'>"XXXX"</span>); // -----------还有好多label用法,慢慢加
5、BOX参数小记
// 建立box box = gtk_hbox_new (gboolean homogeneous, gint spacing); // 或 box = gtk_vbox_new (gboolean homogeneous, gint spacing); homogeneous:TRUE,内部widget平均分配box空间,Widget大小不变,只是占地大了,其他地方padding;一般用FALSE即可,是否平均可在pack指定的widget时进行控制。 spacing:内部widget间的间隔,pixel单位。 // 结合gtk_container_set_border_width (GTK_CONTAINER (box), 8);效果也不错。 // Pack指定widget到box中 gtk_box_pack_start (GtkBox *box, GtkWidget *child, gboolean expand, gboolean fill, guint padding); //或 gtk_box_pack_end (GTK_BOX (box), widget, FALSE, FALSE, 0);
expand:TRUE,对所有TRUE参数打包进来的widget平均分配box中剩余的空间,但并不填充,仍保持widget原大小。
fill:TRUE,只有在expand为TRUE时有效,widget改变大小填充满其在box中占有的空间。
padding:widget与他后面的控件的间隔,pixel单位,最后一个widget将作为与box边缘的间隔。
box其乐无穷呀!
X、封装的代码
虽然丧失了一定的随意性,但是平常也就这些应用了。
X.1 treeview => LGX_storeview lgx_storeview的说明和代码 X.2 toolbar X.3 calendar X.4 inputdialog
Y、Widget的一些常用方法
Y.1、设定大小
gtk_widget_set_usize(widget, x, y);
Y.2、使其“变灰色”
gtk_widget_set_sensitive(widget, FALSE); 2 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); 4 PangoFontDescription *fontdesc; fontdesc = pango_font_description_from_string("uming 15"); 6 gtk_widget_modify_font(treeview, fontdesc); pango_font_description_free(fontdesc); fontdesc = pango_font_description_from_string("uming"); pango_font_description_set_size (font_desc, 12*PANGO_SCALE);
Z、其他小技巧
Z.1 获得widget的上下左右
widget->allocation.x widget->allocation.y widget->allocation.height widget->allocation.width
转载来自:/article/5581889.html
相关文章推荐
- easyUI验证validatebox
- xcode使用svn
- 路由器 交换机密码恢复
- C、C++、C#、Java、php、python语言的内在特性及区别
- 数据库设计(三范式,冗余字段,逆范式)
- JQuery判断radio单选框是否选中
- mongo之mapreduce统计唯一字段
- 在Datatables中加入错误提示功能
- 离线地图应用offline-editor-js
- 《汇编语言》第二版 王爽著 第二章 寄存器 要点
- python 安全编码&代码审计
- Who's in the Middle
- php学习笔记_3_php语法需要注意的点及hereDoc和nowDoc
- Win10开始菜单如何改回Win7经典样式?
- 来自微软的一手内幕:Windows 10是怎么出炉的
- Chapter 15 Alternative Storage Engines 替代存储引擎
- phantomjs使用说明
- IOS数据库的一些了解操作
- Jquery(2.1) 对checkbox的操作(全选,反选,单个操作)
- hdu5335