GTK里的label控件 颜色 大小 等
2009-02-10 16:37
239 查看
http://blog.csdn.net/tresss/archive/2009/01/08/3731853.aspx
![](http://tresss.com/special/gtk/resource/2_Label.jpg)
用过之后,你将会发现GTK里的label控件比windows系统的label功能强大很多,很多.
与此同时,使用起来感觉也麻烦很多.
首先,在hello world的基础上添加一点代码.
这里,添加了一个GtkWidget变量 *lblTest;
就是我们的label.
然后lblTest = gtk_label_new("label for test!");
这里就相当于Windows编程中的create,创建了一个TLabel,当然这里是GtkLabel.参数就是lable的Caption
然后gtk_container_add(GTK_CONTAINER(frmMain), lblTest);
这里相当于Windows编程中的setparent,将这个label置于一个交窗口中,否则它不知道应该显示在哪里.
最后多了一行gtk_widget_show(lblTest);
与gtk_widget_show (frmMain);一样,相当于WIndows中的setVisible(*,TRUE);有了此句,才会显示出此控件.
*排版;
1.长度.
这里的label控件大多没有类似vc,delphi中setwidth,setheight的方法.
甚至Label这里基本没有width,height这个属性。
要改变宽度只有一个方法gtk_label_set_width_chars(GTK_LABEL(lblTest), 20);
设定label可以显示多少个字符,从而调整label的长度.
如果你做过java,则不用急于了解这些,因为gtk的排版与java类似,后面会有介绍.
2.对齐.
对齐的方法应该是gtk_label_set_justify(GTK_LABEL(lblTest), GTK_JUSTIFY_LEFT);
但我试了一下不起作用,这里介绍一个更强大的对齐方法.
gtk_misc_set_alignment(GTK_MISC(lblTest), 1, 0);
第一个参数是lblTest,第二个参数是左右方向的对齐值,第三个参数是上下方向的对齐值;
对齐值的取值范围为0-1.取0时,为左对齐,取1时,为右对齐,取0.5时,为中间对齐.
当然,你也可以取0.3,0.8试一下.这可是我从来没见过的对齐方式.
*其它属性;
1.可选.
windows中标准label是不可以做任何操作的,这里可以给label做一个可选设定,用户可以用鼠标选择并进行复制等操作.
gtk_label_set_selectable (GTK_LABEL(lblTest), TRUE);
2.字体,大小,颜色.
这里的设置比较麻烦一点,GTKLABEL本身并没有提供直接的方法来操作这些属性,其它库的操作方法见后面补充。
而是提供了一种类似html浏览器的方法,需要在代码中设定.
如:
这里的<span>标签就是用来操作label显示的属性的,包括背景色,字体色,字体,字体大小,下划线,等等.
其中foreground='red' 就是定义前景色(字体颜色)为红色,也可以foreground='#00FF00',这两个值是相等的.
underline='double' 是下划线为双线,还可以设值为'none', 'single', 'double', 'low', 'error' 等.
underline_color='blue' 是下划线的颜色.
此外,还可以选的属性有:
font_desc 字体大小,值如'12',官方文档说明为字体描述,但我测试结果为字体大小
size 官方文档为字体大小,但我测试结果不起作用.
stype 样式,值如'normal', 'oblique', 'italic' 等.
weight 字型,值如'ultralight', 'light', 'normal', 'bold', 'ultrabold'等
stretch 拉伸,值如'ultracondensed', 'extracondensed', 'condensed',
'semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded',
'ultraexpanded'
属性值不一一列出,你可以参考安装时程序携带的文档,相对位置为"share/gtk-doc/html/pango/PangoMarkupFormat.html"
注意:官方文档中有好多错误,可以参考但不可全信.
主要内容如下:
The following convenience tags are provided:
Convenience tags
[/code]
整体看起来这个label就像是一个特定功能的webBrowse.
尽管功能比较强大,但给我们动态控制label属性带来很大的麻烦.
*事件
GtkLabel提供了三个事件:move_cursor,copy_clipboard, populate_popup.
第一个事件为光标移动事件。第二个是内容被复制.
第一个我测试了好长时间,没有触发,而且头文件中函数原型与官方文档定义不符.
第二个测试成功,当我选择label中内容并复制后,窗体的标题被修改.
总代码如下:
补充:
良久之后,才发现,原来可以用pango和gdk库来操作label的颜色,字体,大小等.
其实不仅仅是label,其它的一些gtk控件也可以用同样的方法操作.
看代码:
比之前多引用了两个头文件:gdk和pango.
用gtk_widget_modify_fg函数来改变控件的前景色,用gtk_widget_modify_font来改变控件的字体(包含字体大小).
当然,在makefile中别忘了也要加上这两个库文件:gdk-win32-2.0.lib和pango-1.0.lib.
![](http://tresss.com/special/gtk/resource/2_Label.jpg)
用过之后,你将会发现GTK里的label控件比windows系统的label功能强大很多,很多.
与此同时,使用起来感觉也麻烦很多.
首先,在hello world的基础上添加一点代码.
#include <gtk/gtk.h> void destroy (GtkWidget *widget, gpointer *data) { gtk_main_quit (); } int main(int argc, char *argv[]) { GtkWidget *frmMain, *lblTest; gtk_init (&argc, &argv); frmMain = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (frmMain), "destroy",GTK_SIGNAL_FUNC (destroy), NULL); gtk_container_border_width (GTK_CONTAINER (frmMain), 10); lblTest = gtk_label_new("label for test!"); gtk_container_add(GTK_CONTAINER(frmMain), lblTest); gtk_widget_show (frmMain); gtk_widget_show(lblTest); gtk_main (); return 0; }
这里,添加了一个GtkWidget变量 *lblTest;
就是我们的label.
然后lblTest = gtk_label_new("label for test!");
这里就相当于Windows编程中的create,创建了一个TLabel,当然这里是GtkLabel.参数就是lable的Caption
然后gtk_container_add(GTK_CONTAINER(frmMain), lblTest);
这里相当于Windows编程中的setparent,将这个label置于一个交窗口中,否则它不知道应该显示在哪里.
最后多了一行gtk_widget_show(lblTest);
与gtk_widget_show (frmMain);一样,相当于WIndows中的setVisible(*,TRUE);有了此句,才会显示出此控件.
*排版;
1.长度.
这里的label控件大多没有类似vc,delphi中setwidth,setheight的方法.
甚至Label这里基本没有width,height这个属性。
要改变宽度只有一个方法gtk_label_set_width_chars(GTK_LABEL(lblTest), 20);
设定label可以显示多少个字符,从而调整label的长度.
如果你做过java,则不用急于了解这些,因为gtk的排版与java类似,后面会有介绍.
2.对齐.
对齐的方法应该是gtk_label_set_justify(GTK_LABEL(lblTest), GTK_JUSTIFY_LEFT);
但我试了一下不起作用,这里介绍一个更强大的对齐方法.
gtk_misc_set_alignment(GTK_MISC(lblTest), 1, 0);
第一个参数是lblTest,第二个参数是左右方向的对齐值,第三个参数是上下方向的对齐值;
对齐值的取值范围为0-1.取0时,为左对齐,取1时,为右对齐,取0.5时,为中间对齐.
当然,你也可以取0.3,0.8试一下.这可是我从来没见过的对齐方式.
*其它属性;
1.可选.
windows中标准label是不可以做任何操作的,这里可以给label做一个可选设定,用户可以用鼠标选择并进行复制等操作.
gtk_label_set_selectable (GTK_LABEL(lblTest), TRUE);
2.字体,大小,颜色.
这里的设置比较麻烦一点,GTKLABEL本身并没有提供直接的方法来操作这些属性,其它库的操作方法见后面补充。
而是提供了一种类似html浏览器的方法,需要在代码中设定.
如:
gtk_label_set_markup(GTK_LABEL(lblTest), "<span foreground='red' underline='double' underline_color='blue' font_desc='32'>label for test!</span>");
这里的<span>标签就是用来操作label显示的属性的,包括背景色,字体色,字体,字体大小,下划线,等等.
其中foreground='red' 就是定义前景色(字体颜色)为红色,也可以foreground='#00FF00',这两个值是相等的.
underline='double' 是下划线为双线,还可以设值为'none', 'single', 'double', 'low', 'error' 等.
underline_color='blue' 是下划线的颜色.
此外,还可以选的属性有:
font_desc 字体大小,值如'12',官方文档说明为字体描述,但我测试结果为字体大小
size 官方文档为字体大小,但我测试结果不起作用.
stype 样式,值如'normal', 'oblique', 'italic' 等.
weight 字型,值如'ultralight', 'light', 'normal', 'bold', 'ultrabold'等
stretch 拉伸,值如'ultracondensed', 'extracondensed', 'condensed',
'semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded',
'ultraexpanded'
属性值不一一列出,你可以参考安装时程序携带的文档,相对位置为"share/gtk-doc/html/pango/PangoMarkupFormat.html"
注意:官方文档中有好多错误,可以参考但不可全信.
主要内容如下:
The root tag of a marked-up document is <markup>, but pango_parse_markup() allows you to omit this tag, so you will most likely never need to use it. The most general markup tag is <span>, then there are some convenience tags. <span> has the following attributes: <span> attributes
font_desc | A font description string, such as "Sans Italic 12". See pango_font_description_from_string() for a description of the format of the string representation . Note that any other span attributes will override this description. So if you have "Sans Italic" and also a style="normal" attribute, you will get Sans normal, not italic. |
font_family | A font family name |
face | Synonym for font_family |
size | Font size in 1024ths of a point, or one of the absolute sizes
'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large',
'xx-large', or one of the relative sizes 'smaller' or 'larger'.
If you want to specify a absolute size, it's usually easier
to take advantage of the ability to specify a partial
font description using 'font_desc'; you can use
[code]font_desc='12.5' rather thansize='12800'. |
style | One of 'normal', 'oblique', 'italic' |
weight | One of 'ultralight', 'light', 'normal', 'bold', 'ultrabold', 'heavy', or a numeric weight |
variant | 'normal' or 'smallcaps' |
stretch | One of 'ultracondensed', 'extracondensed', 'condensed', 'semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded', 'ultraexpanded' |
foreground | An RGB color specification such as '#00FF00' or a color name such as 'red' |
background | An RGB color specification such as '#00FF00' or a color name such as 'red' |
underline | One of 'none', 'single', 'double', 'low', 'error' |
underline_color | The color of underlines; an RGB color specification such as '#00FF00' or a color name such as 'red' |
rise | Vertical displacement, in 10000ths of an em. Can be negative for subscript, positive for superscript. |
strikethrough | 'true' or 'false' whether to strike through the text |
strikethrough_color | The color of strikethrough lines; an RGB color specification such as '#00FF00' or a color name such as 'red' |
fallback | 'true' or 'false' whether to enable fallback. If disabled, then characters will only be used from the closest matching font on the system. No fallback will be done to other fonts on the system that might contain the characters in the text. Fallback is enabled by default. Most applications should not disable fallback. |
lang | A language code, indicating the text language |
letter_spacing | Inter-letter spacing in 1024ths of a point. |
gravity | One of 'south', 'east', 'north', 'west', 'auto'. |
gravity_hint | One of 'natural', 'strong', 'line'. |
Convenience tags
b | Bold |
big | Makes font relatively larger, equivalent to <span size="larger"> |
i | Italic |
s | Strikethrough |
sub | Subscript |
sup | Superscript |
small | Makes font relatively smaller, equivalent to <span size="smaller"> |
tt | Monospace font |
u | Underline |
整体看起来这个label就像是一个特定功能的webBrowse.
尽管功能比较强大,但给我们动态控制label属性带来很大的麻烦.
*事件
GtkLabel提供了三个事件:move_cursor,copy_clipboard, populate_popup.
第一个事件为光标移动事件。第二个是内容被复制.
第一个我测试了好长时间,没有触发,而且头文件中函数原型与官方文档定义不符.
第二个测试成功,当我选择label中内容并复制后,窗体的标题被修改.
总代码如下:
#include <gtk/gtk.h> GtkWidget *frmMain; void destroy (GtkWidget *widget, gpointer *data) { gtk_main_quit (); } void lblStrCopy (GtkLabel *label) { gtk_window_set_title (GTK_WINDOW (frmMain), "Hello GKT+"); } int main(int argc, char *argv[]) { GtkWidget *lblTest; gtk_init (&argc, &argv); frmMain = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (frmMain), "destroy",GTK_SIGNAL_FUNC (destroy), NULL); gtk_container_border_width (GTK_CONTAINER (frmMain), 10); //Label about lblTest = gtk_label_new("label for test!"); gtk_container_add(GTK_CONTAINER(frmMain), lblTest); gtk_label_set_width_chars(GTK_LABEL(lblTest),30); gtk_misc_set_alignment(GTK_MISC(lblTest), 1, 0); gtk_label_set_selectable (GTK_LABEL(lblTest), TRUE); gtk_label_set_markup(GTK_LABEL(lblTest), "label for test!"); gtk_signal_connect (GTK_OBJECT (lblTest), "copy_clipboard",GTK_SIGNAL_FUNC (lblStrCopy), NULL); gtk_widget_show (frmMain); gtk_widget_show(lblTest); gtk_main (); return 0; }
补充:
良久之后,才发现,原来可以用pango和gdk库来操作label的颜色,字体,大小等.
其实不仅仅是label,其它的一些gtk控件也可以用同样的方法操作.
看代码:
#include <gtk/gtk.h> #include <gdk/gdk.h> #include <pango/pango.h> GtkWidget *frmMain; void destroy (GtkWidget *widget, gpointer *data) { gtk_main_quit (); } int main(int argc, char *argv[]) { GtkWidget *lbl1; gtk_init (&argc, &argv); frmMain = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (frmMain), "destroy",GTK_SIGNAL_FUNC (destroy), NULL); gtk_container_border_width (GTK_CONTAINER (frmMain), 10); //button Create; lbl1 = gtk_label_new("Quit"); gtk_container_add(GTK_CONTAINER(frmMain), lbl1); GdkColor color1; gdk_color_parse ("red", &color1); gtk_widget_modify_fg(lbl1, GTK_STATE_NORMAL, &color1); PangoFontDescription *font1 = pango_font_description_from_string("Sans"); pango_font_description_set_size (font1, 25 * PANGO_SCALE); gtk_widget_modify_font (lbl1, font1); //Show everything; gtk_widget_show (frmMain); gtk_widget_show (lbl1); gtk_main (); return 0; }
比之前多引用了两个头文件:gdk和pango.
用gtk_widget_modify_fg函数来改变控件的前景色,用gtk_widget_modify_font来改变控件的字体(包含字体大小).
当然,在makefile中别忘了也要加上这两个库文件:gdk-win32-2.0.lib和pango-1.0.lib.
相关文章推荐
- gtk 设置标签(label)里字体的大小 颜色等属性的方法
- GTK自定义函数之控件大小、颜色(3)
- Android NumberPicker控件修改分割线颜色及字体颜色大小
- 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
- Label中某几个字符颜色大小不同
- 改变控件的边框颜色(示例Label)
- iOS 开发~设置label上文字显示不同大小、颜色、字体类型
- GTK自定义函数之控件大小、颜色(3)-bobo
- 为 HyperLink、Label等控件设置字体颜色
- 如何改变Static Text控件中文字的字体,字体大小及颜色。
- Android 文字跑马灯控件,支持设置滚动速度,文字颜色,大小等,可设置任意长度文本及任意控件宽度
- Android+HTML 针对android一个控件TextView中文字颜色、大小不同的解决方案
- ios之如何让图片显示成圆形的样式/设置控件边框大小以及颜色
- 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
- 控件的字体大小,及其颜色的设置
- mfc之ClistCtrl控件自绘,实现修改列表框的行高和字的大小,间隔的修改某行颜色和高亮颜色
- 修改控件Spinner内容的字体大小 颜色等属性
- VC++修改控件文字大小和颜色
- GTK进阶学习:改变控件字体大小
- ios 设置label 不同字体大小颜色