GTK常用控件之进度条( GtkProgressBar )

我们到处都能看到进度条的应用,我们下载拷贝个文件,下载个电影等总能看到进度条的影子,如图:

进度条的常用操作无非设置其比例或者获取其比例。

进度条的创建:

GtkWidget *gtk_progress_bar_new(void);

返回值:进度条指针

设置进度条显示的进度比例:

void gtk_progress_bar_set_fraction(

GtkProgressBar *pbar, gdouble fraction);

pbar:需要操作的进度条

fraction:0.0到1.0

获取进度条显示的进度比例:

gdouble  gtk_progress_bar_get_fraction (GtkProgressBar *pbar);

pbar:需要操作的进度条

返回值:进度比例

设置滑槽上的文本显示:

void gtk_progress_bar_set_text(

GtkProgressBar *pbar, gchar *text);

pbar:需要操作的进度条

text:设置的文本内容

设置进度条的移动方向:

void gtk_progress_bar_set_orientation(

GtkProgressBar *pbar,

GtkProgressBarOrientation orientation);

pbar:需要操作的进度条

orientation:移动方向,它是一个枚举变量

GTK_PROGRESS_LEFT_TO_RIGHT:从左向右

GTK_PROGRESS_RIGHT_TO_LEFT:从右向左

GTK_PROGRESS_BOTTOM_TO_TOP:从下向上

GTK_PROGRESS_TOP_TO_BOTTOM:从上向下

获取进度条的方向:

GtkProgressBarOrientation

gtk_progress_bar_get_orientation(GtkProgressBar *pbar);

pbar:需要操作的进度条

返回值:进度条的方向,它是一个枚举类型

例子代码如下:

#include <gtk/gtk.h>

//回调函数,切换进度条的移动方向
void toggle_orientation(GtkWidget *widget, gpointer data)
{
        switch (gtk_progress_bar_get_orientation(GTK_PROGRESS_BAR(data)) ) {
        case GTK_PROGRESS_LEFT_TO_RIGHT:
                gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(data), GTK_PROGRESS_RIGHT_TO_LEFT);
                break;
        case GTK_PROGRESS_RIGHT_TO_LEFT:
                gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(data), GTK_PROGRESS_LEFT_TO_RIGHT);
                break;
        default:
                break;
        }
        return;
}

//回调函数,更新进度条,这样可以看到进度条的移动
void callback(GtkWidget *widget, gpointer data)
{
        gdouble new_val = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(data)) +0.05;

        if (new_val > 1.0) {
                new_val = 0.0;
        }

        //设置进度条新值
        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(data), new_val);

        return;
}

int main(int argc, char *argv[])
{
        //1.gtk环境的初始化
        gtk_init(&argc, &argv);

        //2.创建一个窗口
        GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        //设置窗口的标题
        gtk_window_set_title(GTK_WINDOW(window), "gtk_progress_bar");
        //设置窗口边框宽度
        gtk_container_set_border_width(GTK_CONTAINER(window), 10);

        //3.设置窗口的最小大小
        gtk_widget_set_size_request(window, 300, 200);

        //4.窗口关联destroy信号到gtk_main_quit
        g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

        //5.创建一个垂直容器
        GtkWidget *vbox = gtk_vbox_new(FALSE, 5);
        //将vbox添加到window中
        gtk_container_add(GTK_CONTAINER(window), vbox);

        //6.创建一个进度条
        GtkWidget *progress = gtk_progress_bar_new();
        //将progress添加到vbox中
        gtk_container_add(GTK_CONTAINER(vbox), progress);

        //7.设置进度条的百分比为50%
        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), 0.5);

        //8.设置进度条上显示的文字
        gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress), "some text");

        //9.添加一个button1按钮,切换方向
        GtkWidget *button1 = gtk_button_new_with_label("right to lift");
        gtk_container_add(GTK_CONTAINER(vbox), button1);
        g_signal_connect(button1, "clicked", G_CALLBACK(    toggle_orientation   ), progress);

        //10.添加一个button2,移动进度条
        GtkWidget *button2 = gtk_button_new_with_label("add");
        gtk_container_add(GTK_CONTAINER(vbox), button2);
        g_signal_connect(button2, "clicked", G_CALLBACK(callback), progress);

        //11.显示所欲窗口
        gtk_widget_show_all(window);

        //12.主事件循环
        gtk_main();

        return 0;
}

运行结果:

源码下载:http://download.csdn.net/download/lianghe_work/8939381

转自:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 22:03:20

GTK常用控件之进度条( GtkProgressBar )的相关文章

Android常用控件:进度条

各种进度条属于 ProgressBar的子类 Sytle: 水平风格:Horizontal小风格:Small大风格:Large反向风格:Inverse小反向风格:Small.Inverse大反向风格:Large.Inverse 设置style:   style="?android:attr/progressBarStyle..." 主要属性:最大值:max当前进度:progress次要进度值:SecondaryProgress --效果类似于看电影那些缓冲 判断进度条是转圈还是水平的方

Android中的常用控件之进度条(ProgressBar)

ProgressBar的常用属性:style,进度条的样式,默认为圆形,用style="?android:attr/progressBarStyleHorizontal"可以将进度条设为条状:android:progress,进度条当前所处进度:android:max,进度条总进度. 用线程实现进度条的注意事项:不能在主线程中执行耗时的操作,只能在子线程中操作:另外,在子线程中不能操作主线程中的控件(ProgressBar除外): 修改后MainActivity.java里的代码如下:

Android控件TextProgressBar进度条上显文字

Android系统的进度条控件默认的设计的不是很周全,比如没有包含文字的显示,那么如何在Android进度条控件上显示文字呢? 来自Google内部的代码来了解下,主要使用的addView这样的方法通过覆盖一层Chronometer秒表控件来实现,整个代码如下 : public class TextProgressBar extends RelativeLayout implements OnChronometerTickListener { public static final String

GTK常用控件之行编辑( GtkEntry )

行编辑,只允许输入一行内容的控件,如密码输入框. 行编辑的创建: GtkWidget *gtk_entry_new(void); 返回值:行编辑指针 设置行编辑内容的最大长度: void gtk_entry_set_max_length(GtkEntry *entry, gint max); entry:行编辑 max:长度的最大值,这里填0代表长度不作限制 设置行编辑的文本内容: void gtk_entry_set_text(GtkEntry *entry, const gchar *tex

2015.3.11 VS异步控件及进度条结合应用

1.在Form中添加 指针控件:BackgroundWorker-bgwork:进度条控件progressBar1 以及开始.取消按钮 2.开始按钮启动异步线程 private void button1_Click(object sender, EventArgs e) { bgwork.WorkerReportsProgress = true; //允许异步控件报告状态 bgwork.WorkerSupportsCancellation = true;//允许终止 bgwork.RunWork

GTK常用控件之图片控件( GtkImage )

图片控件和标签的作用很类似,都是作为显示用的,只是图片控件显示的内容是图片. 图片控件的创建: GtkWidget *gtk_image_new_from_file( const gchar *filename ); filename:图片的名字,带路径的话需要加上路径( 相对或绝对 ) 返回值:图片控件指针 通过上面方法创建的图片控件,以图片默认大小来显示,不能修改其大小.如果要改变图片的大小,我们要借助图片资源对象GdkPixbuf,需要注意的是,GdkPixbuf不属于控件类,它以 Gdk

Android自己定义控件:进度条的四种实现方式

前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://download.csdn.net/detail/chaoyu168/9616035 近期一直在学习自己定义控件,搜了很多大牛们Blog里分享的小教程.也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非经常见,比例如以下载

Winform之跨线程访问控件(在进度条上显示字体)

此文章对于遇到必须使用线程但是没有办法在线程内操作控件的问题的处理  有很好的解决方案(个人认为的.有更好的方案欢迎交流.) 在做跨线程访问之前我们先了解下我们所做的需要达到的效果: 这个是批量的将xml文件导入sqlite数据库   每个xml有将近3000的节点  每个节点有5个属性,如果我们不用线程那么在数据导入的过程中   程序很可能卡死   而且基本上动不了,用户的体验性就很差. 所以我们对向数据库添加数据的地方使用了线程: Thread thread = new Thread(new

GTK常用控件之笔记本控件( GtkNotebook )

笔记本控件,可以让用户标签式地切换多个界面.当我们需要多窗口切换时,使用笔记本控件是一个明智的选择. 笔记本控件的创建: GtkWidget *gtk_notebook_new(void); 返回值:笔记本控件指针 设置页标签的位置: void gtk_notebook_set_tab_pos( GtkNotebook *notebook, GtkPositionType pos ); notebook:笔记本控件 pos取值如下: GTK_POS_LEFT:   左 GTK_POS_RIGHT