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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/286579.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go中interface != nil不一定不是nil

摘要&#xff1a; interface{} 值 ! nil不一定不是nil&#xff0c;应使用reflect库判断是否是nil。 测试示例&#xff1a; // todo interface ! nil 不一定 不是nil var value map[string]interface{} reqMap : make(map[string]interface{}) reqMap["key"] valu…

计算机网络学习笔记(四)

文章目录 1.介绍一下HTTPS的流程。2.介绍一下HTTP的失败码。3.说一说你知道的http状态码。4. 301和302有什么区别&#xff1f;5.302和304有什么区别&#xff1f;6. 请描述一次完整的HTTP请求的过程。7.什么是重定向&#xff1f;8. 重定向和请求转发有什么区别&#xff1f;9.介绍…

计算机毕业设计 基于SSM的果蔬作物疾病防治系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

【Amazon Bedrock】体验 Bedrock 的基本功能,为构建强大安全的LLM应用而准备

文章目录 一、什么是Amazon Bedrock&#xff1f;二、为什么选择 Amazon Bedrock三、访问Amazon Bedrock UI四、与Amazon Bedrock 聊天五、对比Amazon Bedrock 不同基础模型的返回结果六、让Amazon Bedrock处理文本七、利用Amazon Bedrock生成图片八、参考链接 一、什么是Amazon…

Wnmp本地部署结合内网穿透实现任意浏览器远程访问本地服务

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1…

从信号处理角度彻底理解FFT

只想速览公式可以转到简明FFT公式 一、FFT起初用于解决的问题 分解复合信号 将复合信号视为若干正弦波与余弦波的叠加&#xff0c;如何得知某个正弦波/余弦波在该信号中的强度&#xff1f; 二、即答 用特定频率的正弦波/余弦波&#xff08;设其为a&#xff09;乘上复合信号…

问界M9激光雷达解说

什么是激光雷达 激光雷达(英文:Lidar),是一种通过发射激光束来测量目标位置、速度等特征量的雷达系统。其工作原理是将激光光束照射到目标物体上,然后通过测量激光光束从发射到反射回来的时间,来计算目标物体的距离、位置、速度等参数。激光雷达通常用于测量地形、地貌、…

云轴科技海通期货 | 一云多芯信创云平台方案入选上海金融科技优秀解决方案

近日&#xff0c;在上海金融科技产业联盟主办的第五届上海金融科技国际论坛上&#xff0c;上海市地方金融监督管理局、中国人民银行上海总部共同发布了2023年度上海金融科技优秀应用场景及解决方案入选名单&#xff0c;其中云轴科技ZStack联合海通期货申报的“一云多芯信创云平…

【linux kernel】linux的SPI框架分析

文章目录 一、linux内核中的SPI框架二、SPI核心的初始化三、SPI核心的数据结构1、struct spi_statistics2、struct spi_delay3、struct spi_device4、struct spi_driver5、struct spi_controller6、struct spi_res7、struct spi_transfer8、struct spi_message9、struct spi_bo…

JavaScript中history对象常用方法【通俗易懂】

✨前言✨   本篇文章主要在于了解及使用JavaScript中history对象常用方法 &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f4cd…

【052】基于Springboot、Vuey电影购票管理系统(附完整源码、数据库)

**基于Springboot、Vue、Mysql的电影购票管理系统&#xff08;附源码、数据库&#xff09;&#xff0c;超级完整的项目&#xff0c;值得下载&#xff01;&#xff01; 链接在博客最底下**电影购票管理系统源码及数据库百度云链接&#xff1a; https://pan.baidu.com/s/1loetDV…

VC6.0 下载的dsw打不开解决

有位朋友发了个老项目给我&#xff0c;是十多年前的VC6.0写的&#xff0c;为此我下载了一个VC6。但当选择打开工作空间时&#xff0c;却没有反应&#xff0c;甚至会报错。提示如下&#xff1a; 根据提示内容&#xff0c;Google了一下&#xff0c;找到了这篇帖子&#xff1a;htt…

poi操作Excel给列设置下拉菜单(数据验证)

效果图&#xff1a; pom.xml文件增加依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency> 12345Workbook实现类有三个&#xff1a;HSSFWork…

2024,「量子人工智能」比想象中来得更快

我们离量子人工智能的未来还有多远&#xff1f; 两种改变游戏规则的技术的蓄意碰撞有可能颠覆科技行业&#xff0c;并带来一个商业颠覆和创新的新时代。很少有行业能幸免于这场变革&#xff0c;它将创造全新的价值和风险。夸夸其谈&#xff1f;业界并不这么认为。未来&#xff…

从零开始 - 在Python中构建和训练生成对抗网络(GAN)模型

生成对抗网络&#xff08;GANs&#xff09;是一种强大的生成模型&#xff0c;可以合成新的逼真图像。通过完整的实现过程&#xff0c;读者将对GANs在幕后的工作原理有深刻的理解。本教程首先导入必要的库并加载将用于训练GAN的Fashion-MNIST数据集。然后&#xff0c;提供了构建…

2024年【通信安全员ABC证】复审考试及通信安全员ABC证操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 通信安全员ABC证复审考试根据新通信安全员ABC证考试大纲要求&#xff0c;安全生产模拟考试一点通将通信安全员ABC证模拟考试试题进行汇编&#xff0c;组成一套通信安全员ABC证全真模拟考试试题&#xff0c;学员可通过…

优化模型:matlab二次规划

1.二次规划 1.1 二次规划的定义 若某非线性规划的目标函数为自变量 x x x的二次函数&#xff0c;且约束条件全是线性的&#xff0c;则称这种规划模型为二次规划。 1.2 二次规划的数学模型 min ⁡ 1 2 x T H x f T x \min \frac{1}{2}\boldsymbol{x}^{\boldsymbol{T}}\bolds…

【Matlab】RF随机森林时序预测算法(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88692249 一&#xff0c;概述 随机森林的基本思想是利用多个决策树对时序数据进行预测&#xff0c;其中每个决策树都使用不同的随机抽样方式选择训练数据&#xff0c;以减小过拟合的风险。 随机森林时序预测…

【计算机毕业设计】SSM实验室设备管理

项目介绍 本项目为后台管理系统&#xff0c;分为管理员、老师、学生三种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 信息管理&#xff1a;用户管理&#xff1b; 基础管理&#xff1a;实验室管理,实验室申请记录,设备管理,设备记录管理,耗材管理,耗材记录管理等功能…

【Java进阶篇】字符串常量、字符串常量池详解

字符串常量、字符串常量池详解 ✔️字符串常量池是如何实现的?✔️字符串常量从哪来的? ✔️字符串常量是什么时候进入到字符串常量池的? ✔️字符串常量池是如何实现的? 字符串常量池 (String Constant Pool) 是Java中一块特殊的内存区域&#xff0c;用于存储字符串常量。…