【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

相关推荐
倔强的石头10632 分钟前
【Linux指南】用户与系统基础操作
linux·运维·服务器
云上艺旅37 分钟前
centos升级内核
linux·运维·centos
kaikaile199541 分钟前
centos开启samba服务
linux·运维·centos
云上艺旅44 分钟前
centos部署k8s v1.33版本
linux·云原生·kubernetes·centos
好多知识都想学1 小时前
Centos 7 服务器部署多网站
linux·服务器·centos
好多知识都想学1 小时前
centos 7 部署awstats 网站访问检测
linux·运维·centos
Li-Yongjun1 小时前
深度解析 Linux 内核参数 net.ipv4.tcp_rmem:优化网络性能的关键
linux·网络·tcp/ip
藥瓿亭1 小时前
K8S认证|CKS题库+答案| 10. Trivy 扫描镜像安全漏洞
linux·运维·服务器·云原生·容器·kubernetes·cks
AIGC_北苏2 小时前
Ubuntu 安装 Mysql 数据库
数据库·mysql·ubuntu
leo__5202 小时前
在Ubuntu中设置开机自动运行(sudo)指令的指南
服务器·ubuntu·postgresql