【C语言】Ubuntu 22上用GTK写GUI程序
2024-01-02 05:47:56
一、GTK介绍
GTK (GIMP Toolkit) 是一个多平台的图形用户界面工具包。它最初是为图像处理程序 GIMP 开发的,后来演变成为许多操作系统上开发图形界面应用程序的通用库。GTK 是用C语言编写的,并且是自由和开源软件,遵循LGPL (GNU Lesser General Public License) 许可证。
桌面环境(如 GNOME、XFCE、LXDE)使用GTK作为其基本的图形界面库来构建其用户界面。这些桌面环境提供了完整的桌面系统体验,包括窗口管理、系统菜单、面板、工具栏和其他基础设施,GTK则是使得这些组件拥有统一和美观风格的基石。
二、Ubuntu 22上用GTK写GUI程序
要使用GTK开发图形用户界面(GUI)程序,首先需要安装GTK库。
1. 确保GTK库已安装。
在Ubuntu系统上,可以使用以下命令安装GTK的开发文件:
sudo apt install libgtk-4-dev
sudo apt install libgtk-3-dev
2. 创建一个C文件(例如:`hello.c`)
添加以下代码,这个示例程序将创建一个带有按钮的窗口,单击按钮会在终端中打印"Hello World"。
#include <gtk/gtk.h>
static void print_hello(GtkWidget *widget, gpointer data) {
g_print("Hello World\n");
}
static void activate(GtkApplication *app, gpointer user_data) {
GtkWidget *window;
GtkWidget *button;
// 创建一个窗口
window = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(window), "Window");
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
// 创建一个按钮,绑定点击事件
button = gtk_button_new_with_label("Hello World");
g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL);
gtk_window_set_child(GTK_WINDOW(window), button);
// 显示窗口和按钮
gtk_widget_show(window);
}
int main(int argc, char **argv) {
GtkApplication *app;
int status;
// 创建一个GtkApplication实例
app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
status = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return status;
}
3. 编译这个程序。
可以使用`gcc`编译器进行编译,并且链接GTK库:
gcc `pkg-config --cflags gtk4` -o hello hello.c `pkg-config --libs gtk4`
命令中的?pkg-config
?用于自动查找GTK库的编译和链接标志。这里的`gtk4`表示我们使用的是GTK 4,如果需要使用GTK 3,则将`gtk4`替换为`gtk+-3.0`。
4. 运行编译后的程序:
./hello
这个程序是使用GTK的C API编写的。
GTK也有许多语言绑定供不同语言使用,例如Python,C++,Rust等,所以也可以用这些语言和相应的GTK绑定来开发GUI程序。
对于其他语言的示例和详细说明,可以查阅GTK的官方文档或找到相应的语言绑定教程。
5. GTK官网
The GTK Project - A free and open-source cross-platform widget toolkit
文章来源:https://blog.csdn.net/eidolon_foot/article/details/135330336
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!