分享免费的编程资源和教程

网站首页 > 技术教程 正文

用GTK+来创建一个带界面的C语言程序10——数字选择

goqiw 2024-09-29 16:35:26 技术教程 59 ℃ 0 评论

本节将介绍如何创建和使用滚动按钮控件,设定滚动按钮控件的属性来进行数字选择。数值调节按钮控件(GtkSpinButton)是最常用的数字选择控件,GtkSpinButton是允许用户设置某些属性值的理想方式。GtkSpinButton允许用户单击两个箭头中的一个来增加或减少显示的值,而不必直接在GtkEntry中键入数字。仍然可以输入一个值,并且可以检查它以确保它在给定的范围内。它可以根据设置来显示并供用户选择整数或浮点数,还可以组合成其他控件。

本示例展示了数值调节按钮控件的一般使用方法。

/*数字选择*/

#include <gtk/gtk.h>

int main(int argc, char * argv[])

{

GtkWidget * window;

GtkWidget * vbox;

GtkWidget * frame;

GtkWidget * spin;

GtkWidget * label;

GtkWidget * vvbox;

GtkWidget * hbox, *vbox1, *vbox2, * vbox3;

GtkAdjustment * adj1;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

gtk_window_set_title(GTK_WINDOW(window), "滚动按钮");

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

gtk_container_set_border_width(GTK_CONTAINER(window), 10);


vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

gtk_container_add(GTK_CONTAINER(window), vbox);

frame = gtk_frame_new("类似一个日历");

gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);


hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);

gtk_container_add(GTK_CONTAINER(frame), hbox);

gtk_container_set_border_width(GTK_CONTAINER(hbox), 10);


vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

gtk_box_pack_start(GTK_BOX(hbox), vbox1, TRUE, TRUE, 5);

label = gtk_label_new("年:");

gtk_box_pack_start(GTK_BOX(vbox1), label, FALSE, FALSE, 5);

spin = gtk_spin_button_new_with_range(1990, 2100,1);

gtk_box_pack_start(GTK_BOX(vbox1), spin, FALSE, FALSE, 5);


vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 5);

label = gtk_label_new("月:");

gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 5);

spin = gtk_spin_button_new_with_range(1, 12,1);

gtk_box_pack_start(GTK_BOX(vbox2), spin, FALSE, FALSE, 5);


vbox3 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

gtk_box_pack_start(GTK_BOX(hbox), vbox3, TRUE, TRUE, 5);

label = gtk_label_new("日:");

gtk_box_pack_start(GTK_BOX(vbox3), label, FALSE, FALSE, 5);

spin = gtk_spin_button_new_with_range(1, 31,1);

gtk_box_pack_start(GTK_BOX(vbox3), spin, FALSE, FALSE, 5);


frame = gtk_frame_new(NULL);

gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);

vvbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

gtk_container_add(GTK_CONTAINER(frame), vvbox);

gtk_container_set_border_width(GTK_CONTAINER(vvbox), 10);

label = gtk_label_new("第一个滚动按钮,\n显示整数,范围:0-100");

adj1 = gtk_adjustment_new(50.0, 0.0, 100.0, 1.0, 5.0, 5.0);

spin = gtk_spin_button_new(adj1, 5, 1);

gtk_box_pack_start(GTK_BOX(vvbox), label, FALSE, FALSE, 3);

gtk_box_pack_start(GTK_BOX(vvbox), spin, FALSE, FALSE, 3);


label = gtk_label_new("第二个滚动按钮,\n显示浮点数,范围:0.1-1.50");

spin = gtk_spin_button_new_with_range(0, 9.9, 0.1);

gtk_box_pack_start(GTK_BOX(vvbox), label, FALSE, FALSE, 3);

gtk_box_pack_start(GTK_BOX(vvbox), spin, FALSE, FALSE, 3);


gtk_widget_show_all(window);

gtk_main();


return FALSE;

}

运行结果:

代码分析:

(1) 滚动按钮

有两个函数可以创建滚动按钮;一个是创建滚动按钮的函数是gtk_spin_button_new_with_range,它也有 3 个参数,第 1 个参数是最小值,第 2 个参数是最大值,第 3 个参数是每次增长的值。另一个是 gtk_spin_button_new,它有 3 个参数,第 1 个参数是 GtkAdjustment 类型,第 2 个参数是滚动按钮每次按下后数字变化的幅度,第 3 个参数是按钮中文本显示区域中显示的数字。

GtkAdjustment对象表示一个值,该值具有关联的下限和上限、步长和页面增量以及页面大小。它在几个GTK+小部件中使用,包括GtkSpinButton、GtkViewport和GtkRange (GtkScrollbar和GtkScale的基类)。GtkAdjustment对象本身不会更新值。相反,由GtkAdjustment的所有者来控制值。

GtkAdjustment * gtk_adjustment_new (

gdouble value,

gdouble lower,

gdouble upper,

gdouble step_increment,

gdouble page_increment,

gdouble page_size);

参数:

value:初始值

lower :下限的最小值

upper :上限的最大值

step_increment :数值的步长

page_increment 页面增量

page_size:页面大小

(2) 取得滚动按钮的当前值

本例中未取得滚动按钮的当前值,可以用函数 gtk_spin_button_get_value 来取得,这个值是 gdouble 型的,还可以用 gtk_spin_button_get_value_as_int 函数来取得滚动按钮的整型值。

(3) 滚动按钮的信号

滚动按钮有 4 个属于自己的信号,其中“change_value”和“value_changed”信号分别在变量改变前和改变后发出,对于用滚动按钮来控制其他控件很有用;另两个信号是“input”和“output”,分别在输入和输出时发生。

滚动按钮控件提供非常轻松的选择数字的方式,在用户要输入大量规范数字时经常用到,事实上它是一个单行输入控件和两个方向按钮控件用容器的包装组合而成,然后再用一系列函数将它们联系起来。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表