【C语言】Ubuntu 22上用GTK写GUI程序

一、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的开发文件:

bash 复制代码
sudo apt install libgtk-4-dev
sudo apt install libgtk-3-dev

2. 创建一个C文件(例如:`hello.c`)

添加以下代码,这个示例程序将创建一个带有按钮的窗口,单击按钮会在终端中打印"Hello World"。

cpp 复制代码
#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库:

bash 复制代码
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. 运行编译后的程序:

bash 复制代码
./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

相关推荐
韩楚风3 分钟前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学6 分钟前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO12 分钟前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu728 分钟前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我30 分钟前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、30 分钟前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程31 分钟前
Linux中环境变量
linux
挥剑决浮云 -1 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
小O_好好学2 小时前
CentOS 7文件系统
linux·运维·centos
x晕x3 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器