GtkFrame学习记录

📖 官方学习网站
👁 Youtube视频学习

直接上案例代码

#include <gtk/gtk.h>

static void load_css(void);
static GtkWidget *create_window(const gint, const gint);

int main(int argc, char *argv[])
{
	gtk_init(&argc, &argv);
	load_css();

	GtkWidget *window;
	GtkWidget *frame;
	GtkWidget *button;

	/// ***创建一个窗口
	window = create_window(400, 350);
	/// 创建一个frame并带有标签
	// frame = gtk_frame_new("Frame");
	/// 创建一个不带标签的frame,并使用函数进行设置标签
	frame = gtk_frame_new(NULL);
	// gtk_frame_set_label(GTK_FRAME(frame), "Frame");
	/// 设置标签的位置 x默认为0.0(最左边)  y默认为0.5(线的中间)
	// gtk_frame_set_label_align(GTK_FRAME(frame), 0.5, 1.0); // 设置为x方向为中间,y方向在线的上方
	/// 将标签小部件设置为button
	// button = gtk_button_new_with_mnemonic("_Click Me");
	button = gtk_button_new_from_icon_name("weather-clear", GTK_ICON_SIZE_DIALOG);
	g_object_set(button, "margin", 20, NULL);
	// gtk_frame_set_label_widget(GTK_FRAME(frame), button);
	///
	// gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE);
	// gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
	// gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);
	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);

	/// 上边的所有设置都可以通过以下函数一并达成
	g_object_set(frame,
		     "label", "Frame",
		     "label-xalign", 0.5,
		     "label-yalign", 0.5,
		     //      "label-widget", button,
		     "shadow-type", GTK_SHADOW_ETCHED_IN,
		     /// *** 添加GtkContainer的属性
		     "border-width", 0,
		     /// *** 这里使用"child"属性将button作为frame的child,而不是part of frame,
		     /// *** 功能类似gtk_container_add
		     "child", button,
		     "parent", window,
		     NULL);

	/// *** 使用"parent"属性来实现一下代码
	// gtk_container_add(GTK_CONTAINER(window), frame);

	gtk_widget_show_all(window);
	gtk_main();
}

static GtkWidget *create_window(const gint w, const gint h)
{
	GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
	gtk_window_set_default_size(GTK_WINDOW(window), w, h);
	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
	gtk_window_set_title(GTK_WINDOW(window), "Hello GTK3");
	gtk_container_set_border_width(GTK_CONTAINER(window), 50);

	return window;
}

static void load_css(void)
{
	GtkCssProvider *provider;
	GdkDisplay *display;
	GdkScreen *screen;

	const char *css_style_file = "style.css";
	GFile *css_fp = g_file_new_for_path(css_style_file);
	GError *error = 0;

	provider = gtk_css_provider_new();
	display = gdk_display_get_default();
	screen = gdk_display_get_default_screen(display);

	gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
	gtk_css_provider_load_from_file(provider, css_fp, &error);

	g_object_unref(provider);
}
// style.css
window {
	background-color: thistle;
}

frame {
	background-color: wheat;
	padding: 30px;
	border:5px solid;
	border-color: black;
}

frame > border {
	background-color: cadetblue;
	border:5px solid;
	color: cyan;
}

frame > label {
	background-color: green;
	color: white;
	font-size: 15px;
	font-weight: bold;
	padding: 30px;
	border-radius: 30%;
	border:5px solid;
	border-color: cornflowerblue;
}

frame > button {
	background-color: chartreuse;
}
  • 运行结果
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很不错的开发程序的教材 目 录 前言 第一部分 Linux GUI编程框架及编程基础 第1章 Linux软件开发概述 1 1.1 关于Linux 1 1.2 关于Linux的桌面环境 2 1.3 Linux系统中的软件开发 3 1.3.1 开发所使用的库 3 1.3.2 Gnome的开发结构 4 1.4 开发Linux应用程序的编程语言 和编程工具 6 1.5 本书的结构 7 第2章 Gtk+/Gnome开发简介 8 2.1 安装Gtk+/Gnome库 8 2.2 第一个Gtk+应用程序 9 2.2.1 一个什么也不能做的窗口 9 2.2.2 示例代码的含义 9 2.2.3 GTK的Hello World 10 2.2.4 Gtk+的信号和回调函数原理 12 2.2.5 Hello World代码解释 14 2.2.6 运行helloworld 17 2.3 Gnome应用程序 17 2.4 GNU C 编译器 18 2.4.1 使用 gcc 18 2.4.2 gcc 选项 18 2.5 初始化库 19 2.6 用popt分析参数 20 2.6.1 参数分析方法 20 2.6.2 GnomeHello程序的参数分析 22 2.7 国际化 25 2.8 保存配置信息 27 2.8.1 读出存储的配置数据 28 2.8.2 在配置文件中存储数据 30 2.8.3 配置文件迭代器 30 2.8.4 节迭代器 33 2.8.5 其他的配置文件操作 33 2.9 会话管理 34 2.10 Gtk+的主循环 36 2.10.1 主循环基本知识 36 2.10.2 退出函数 36 2.10.3 Timeout函数 37 2.10.4 idle函数 37 2.10.5 输入函数 38 2.11 编译应用程序 39 2.11.1 生成源代码树 39 2.11.2 configure.in文件 41 2.11.3 Makefile.am文件 43 2.11.4 安装支持文件 44 第二部分 Linux 编程常用C 语言 函数库及构件库 第3章 glib库简介 49 3.1 类型定义 49 3.2 glib的宏 49 3.2.1 常用宏 49 3.2.2 调试宏 50 3.3 内存管理 52 3.4 字符串处理 53 3.5 数据结构 55 3.5.1 链表 55 3.5.2 树 59 3.5.3 哈希表 63 3.6 GString 65 3.7 计时器函数 66 3.8 错误处理函数 67 3.9 其他实用函数 67 第4章 构件定位 69 4.1 构件的显现、映射和显示 69 4.2 其他的构件概念 70 4.3 构件的类型转换 72 4.4 组装构件 72 4.4.1 尺寸分配 73 4.4.2 GtkWindow构件 74 4.4.3 GtkBox 76 4.4.4 表格构件GtkTable 79 4.4.5 固定容器构件GtkFixed 83 4.4.6 布局容器构件GtkLayout 85 第5章 按钮构件 87 5.1 普通按钮GtkButton 87 5.2 开关按钮GtkToggleButton 90 5.3 检查按钮GtkCheckButton 91 5.4 无线按钮GtkRadioButton 91 第6章 调整对象 95 6.1 创建一个调整对象 95 6.2 使用调整对象 95 6.3 调整对象内部机制 96 第7章 文本构件GtkText 98 7.1 创建、配置文本构件 98 7.2 操作文本 99 7.3 键盘快捷键 100 7.4 GtkText示例 100 第8章 范围构件GtkRange 105 8.1 滚动条构件GtkScrollBar 105 8.2 比例构件GtkScale 105 8.2.1 函数和信号 105 8.2.2 常用的范围函数 106 8.2.3 键盘和鼠标绑定 107 8.2.4 示例 107 第9章 杂项构件 114 9.1 标签构件GtkLabel 114 9.2 箭头构件GtkArrow 117 9.3 工具提示对象GtkTooltips 119 9.4 进度条构件GtkProgressBar 120 9.5 对话框构件 126 9.6 pixmap 127 9.7 标尺构件GtkRuler 134 9.8 文本输入构件GtkEntry 137 9.9 微调按钮构件GtkSpinButton 140 9.10 组合框GtkCombo 146 9.11 日历构件GtkCalendar 148 9.12 颜色选择构件GtkColorSelect 158 9.13 文件选择构件GtkFileSelect 162 第10章 容器构件GtkContainer 165 10.1 事件盒构件GtkEventBox 165 10.2 对齐构件GtkAlignment 166 10.3 框架构件GtkFrame 167 10.4 比例框架构件GtkAspectFrame 169 10.5 分栏窗口构件GtkPanedWindow 170 10.6 视角构件GtkViewport 174 10.7 滚动窗口构件GtkScrolled Window 175 10.8 按钮盒构件GtkButtonBox 177 10.9 工具条构件GtkToolbar 181 10.10 笔记本构件GtkNotebook 187 第11章 分栏列表构件GtkCList 193 11.1 创建分栏列表构件GtkCList 193 11.2 操作模式 193 11.3 操作分栏列表构件列标题 194 11.4 操纵列表 194 11.5 向列表中添加行 196 11.6 在单元格中设置文本和pixmap 图片 197 11.7 存储数据指针 198 11.8 处理选择 198 11.9 信号 199 11.10 GtkCList示例 199 第12章 树构件 204 12.1 创建新树构件 204 12.1.1 添加一个子树 204 12.1.2 处理选中的列表 205 12.1.3 树构件内部机制 205 12.1.4 信号 206 12.1.5 函数和宏 206 12.2 树项构件GtkTreeItem 208 12.2.1 信号 209 12.2.2 函数和宏 210 12.3 树构件示例 210 第13章 GnomeApp构件和GnomeUIInfo 215 13.1 主窗口GnomeApp 215 13.2 GnomeUIInfo 216 13.2.1 创建GnomeUIInfo 216 13.2.2 将GnomeUIInfo转换为构件 218 第14章 状态条构件 221 14.1 状态条构件简介 221 14.2 GnomeAppBar构件 221 14.3 状态条构件GtkStatusbar 222 第15章 对话框 225 15.1 GnomeDialog构件 225 15.1.1 创建对话框 225 15.1.2 填充对话框 226 15.1.3 处理GnomeDialog的信号 226 15.1.4 最后的修饰 227 15.2 模态对话框 229 15.3 一个对话框示例 230 15.4 特殊对话框 231 15.4.1 GnomeAbout 231 15.4.2 GnomePropertyBox—属性框 233 15.4.3 GnomeMessageBox—消息框 234 第16章 GDK 基础 236 16.1 GDK和Xlib 236 16.2 GdkWindow 237 16.2.1 GdkWindow和GtkWidget 237 16.2.2 GdkWindow属性 238 16.3 视件和颜色表 240 16.3.1 GdkVisual 240 16.3.2 视件的类型 241 16.3.3 颜色和GdkColormap 242 16.3.4 获得颜色表 244 16.4 可绘区和pixmap 244 16.5 事件 245 16.5.1 事件类型 245 16.5.2 事件屏蔽 247 16.5.3 在Gtk+中接收Gdk事件 248 16.5.4 鼠标按键事件 250 16.5.5 键盘事件 252 16.5.6 鼠标移动事件 254 16.5.7 焦点变更事件 257 16.6 鼠标指针 257 16.6.1 指针定位 257 16.6.2 独占指针 258 16.6.3 改变光标 259 16.7 字体 259 16.8 图形上下文 263 16.9 绘图 267 16.9.1 画点 267 16.9.2 画线 268 16.9.3 矩形 268 16.9.4 画弧 269 16.9.5 多边形 269 16.9.6 文本 270 16.9.7 pixmap像素映射图形 270 16.9.8 RGB缓冲 271 第三部分 Linux GUI 生成器Glade 第17章 Glade:GUI生成器 273 17.1 安装Glade 273 17.1.1 Glade简介 273 17.1.2 安装Glade 273 17.1.3 在Gnome主菜单下为Glade 创建菜单项 274 17.1.4 在Gnome面板上创建快捷 按钮 275 17.2 用Glade生成图形用户接口 275 17.2.1 Glade的界面简介 275 17.2.2 用Glade创建应用程序界面 277 第四部分 调试工具 第18章 程序调试 283 18.1 用gdb调试应用程序 283 18.1.1 为调试程序做准备 283 18.1.2 获得gdb帮助 284 18.1.3 gdb常用命令 284 18.1.4 gdb 应用举例 286 18.2 用xxgdb调试应用程序 289 第五部分 附 录 附录A GnomeHello源代码 293 附录B 在线资源 304 附录C Gtk+/Gnome对象总览 306

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值