#include <gtk/gtk.h>
#include <string.h>
// 回调函数,切换进度条的移动方向
void toggle_orientation(GtkWidget *widget, gpointer data)
{
// gtk_progress_bar_get_orientation: 获得进度条当前移动的方向
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;
}
}
// 更新进度条,这样就能够看到进度条的移动
void callback(GtkWidget *widget, gpointer data)
{
// 在原来值基础上增加 0.05
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);
}
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv); // 初始化
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // 创建主窗口
gtk_window_set_title(GTK_WINDOW(window), "GtkProgressBar"); // 设置窗口标题
gtk_container_set_border_width(GTK_CONTAINER(window), 10); // 设置边框宽度
// 设置窗口在显示器中的位置为居中
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
// 设置窗口的最小大小
gtk_widget_set_size_request(window, 300, 200);
// 窗口关联 destroy 信号 到 gtk_main_quit
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
GtkWidget *vbox = gtk_vbox_new(FALSE, 5); // 垂直布局容器
gtk_container_add(GTK_CONTAINER(window), vbox); // 容器加入窗口
// 创建一个进度条
GtkWidget *progress = gtk_progress_bar_new();
gtk_container_add(GTK_CONTAINER(vbox), progress); // 加入垂直布局容器
// 设置进度条显示的百分比:50%
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), 0.5 );
// 设置在进度条的滑槽上的文本显示
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress), "some text");
// 添加一个按钮,切换移动方向
GtkWidget *button_orientation = gtk_button_new_with_label("Right to Left");
g_signal_connect(button_orientation, "clicked", G_CALLBACK(toggle_orientation), progress); // connect
gtk_container_add(GTK_CONTAINER(vbox), button_orientation); // 加入垂直布局容器
// 增加进度条进度按钮
GtkWidget *button = gtk_button_new_with_label("add");
g_signal_connect(button, "clicked", G_CALLBACK(callback), progress); // connect
gtk_container_add(GTK_CONTAINER(vbox), button); // 加入垂直布局容器
gtk_widget_show_all(window);
gtk_main(); // 主事件循环
return 0;
}
GTK常用控件之进度条源代码
需积分: 15 33 浏览量
2015-01-23
11:49:01
上传
评论
收藏 13KB ZIP 举报
Mike江
- 粉丝: 5237
- 资源: 107
最新资源
- 基于 Java的班级管理系统课程设计
- 深入探索Suno AI:教程、元标签与案例分析.pdf
- 超市会员积分管理系统主要用于实现了企业管理数据统计等
- 基于 Java的班级管理系统
- MyBatis 动态 SQL:灵活而强大的查询构建器.pdf
- com.accordion.prettyo.apk
- 毕业设计:基于SSM的mysql-ssm软件bug管理系统(源码 + 数据库 + 说明文档)
- MTSQL8.0.35windows(64bit)-mysql-installer-community-8.0.35.0
- 人工智能引领音乐创作新时代之Suno AI
- Public-bicycle-usage-forecast-master.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈