TPM 程序设计基础 3-2 :GTK3 窗口与控件
前言
本文来简单讲 GTK3 中窗口简述,具体控件的声明、使用,当然,这里说的控件,都是课设中要使用的。
窗口简述
- 基于 application 创建窗口,请参阅: TPM 程序设计基础 3-0 :GTK3 实例 。
补充:销毁窗口
窗口销毁函数
复制gtk_widget_destroy( 窗口指针 );
销毁信号回调自定义函数
-
点击右上角的 X 关闭键,实际上是默认向 GTK3 库发送一个
"destroy"
信号,调用一个回调函数,关闭窗口。 -
我们可以截断
"destroy"
这个信号,来回调自定义的回调函数。复制
//连接信号,让点击右上角的 X 关闭按钮后,便调用 extra_pcr_win_destroy 函数 g_signal_connect( 窗口指针 , "delete_event", G_CALLBACK( 回调函数名 ), 参数);
- 更多回调函数信息,请参阅: TPM 程序设计基础 3-1 :g_signal_connect() 函数 。
控件序述
在 GTK3 中如果要简单的使用控件,无外乎就几个步骤,这里以固定容器为例:
-
声明控件的指针。
复制
GtkWidget *A;
-
选择一个控件对应的函数,以控件的指针创建控件。
复制
A = gtk_XXXX_new_with_label(XXXX, XXXX);
-
将创建的控件添加到窗口容器中。
gtk_fixed_put(GTK_FIXED(fixed_box), button_pcr_get, 100, 50);
复制
gtk_fixed_put(GTK_FIXED(fixed_box), A, 100, 50); //fixed_box 是固定容器的指针 //A 是控件的指针 //100 是固定容器的 X 横坐标(左上角 x = 0) //50 是固定容器的 Y 纵坐标(左上角 y = 0)
-
设置控件的高度、宽度等参数。
复制
gtk_widget_set_size_request(A, 50, 60); //A 是控件的指针 //50 是控件宽度 //60 是控件高度
-
使用控件触发回调函数。(主要是按钮、菜单等控件)
复制
//连接信号,让点击按钮后,便调用 print_hello 函数 g_signal_connect(A , "clicked" , G_CALLBACK( print_hello ) , NULL);
- 更多回调函数信息,请参阅: TPM 程序设计基础 3-1 :g_signal_connect() 函数 。
-
使用函数调用控件的值等等。(主要是单/多行文本框等控件)
- 见后文 文本框 控件。
实例
以基于固定容器的控件为例。
- 这是一个最简单的 “button” 按钮控件的声明与使用过程。
复制static void controller(GtkWidget *fixed_box)
{
//声明控件的指针
GtkWidget *button_pcr_get;
//选择一个 button 控件对应的函数,以控件的指针创建 按钮
button_pcr_get = gtk_button_new_with_label("读取 PCR");
//button 设置高度、宽度,并添加到固定容器布局
gtk_fixed_put(GTK_FIXED(fixed_box), button_pcr_get, 100, 50);
//设置 button 控件的高度、宽度
gtk_widget_set_size_request(button_pcr_get, 100, 50);
//连接信号,让点击按钮后,便调用 get_pcr_value 函数
g_signal_connect(button_pcr_get , "clicked" , G_CALLBACK( get_pcr_value ) , NULL);
......
}
更多控件
button 按钮控件
-
例子,具体见实例:
复制
//声明控件的指针 GtkWidget *button_pcr_get; //选择一个 button 控件对应的函数,以控件的指针创建 按钮 button_pcr_get = gtk_button_new_with_label("读取 PCR");
文本框 控件
文本框 控件 添加到窗口容器
以及 设置控件的高度、宽度等参数
同 button 实例。
单行文本框
-
例子:
复制
//声明控件的指针 GtkWidget *entry_pcr_extra_string); // 创建行编辑 entry_pcr_extra_string = gtk_entry_new();
多行文本框
-
例子:
复制
//声明 多行文本框 控件的指针 GtkWidget *entry_pcr_read; //创建一个多行文本框 entry_pcr_read = gtk_text_view_new();
文本框 更多相关函数
设置 文本框 显示最大字符长度
-
复制
//设置 文本框 编辑显示最大字符的长度为 40 gtk_entry_set_max_length(GTK_ENTRY( 文本框指针 ), 40);
设置 文本框 行编辑内的值
-
复制
//首次打开窗口是加载的值 gtk_entry_set_text(GTK_ENTRY( 文本框指针 ), "123");
使用函数调用控件的值
-
复制
//声明 const gchar * 字符串指针 const gchar *entry_A_text; //将 文本框 中的字符串,赋予 const gchar * 字符串指针 entry_A_text = gtk_entry_get_text(GTK_ENTRY( 文本框指针 ));
字符串输出显示到 文本框 控件
注意:这里的输出显示函数 单行 与 多行 不一样 。
-
单行:
复制
gtk_entry_set_text(GTK_ENTRY( 单行文本框指针 ), "2+2=4");
-
多行:
复制
//声明 GtkTextBuffer * 字符串缓冲区 GtkTextBuffer *buffer; //为多行文本框控件分配缓冲区 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW( 多行文本框指针 )); //从头显示缓冲区字符 gtk_text_buffer_set_text (buffer, "1234567890abcdef", -1);
提示弹窗
-
提示弹窗则更加特殊,创建函数的参数更多。
相比于控件,其实更接近于创建一个新的窗口。
例子:
复制
//声明 提示弹窗 的指针 GtkWidget *dialog; //创建一个提示弹窗,"note info" 为提示弹窗的提示信息 dialog = gtk_message_dialog_new(struct_pcr_extra.win_extra, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, dialog_title, "note info"); //设置提示弹窗标题 gtk_window_set_title(GTK_WINDOW(dialog), "title"); //以指针运行 提示弹窗 gtk_dialog_run(GTK_DIALOG(dialog)); //点击确定关闭提示弹窗 gtk_widget_destroy(dialog);
作者:Yogile
出处:https://www.cnblogs.com/Yogile/p/12811453.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
分类:
《可信计算基础》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构