【C/Python】GtkApplicationWindow
一、C语言
GtkApplicationWindow 是 GTK 库中用于创建应用程序主窗口的一个控件。
首先,需要确保环境安装了GTK开发库。然后,以下是一个简单的使用 GtkApplicationWindow 创建一个 GTK 应用程序的示例:
#include <gtk/gtk.h>static void activate(GtkApplication *app, gpointer user_data) {// 创建一个 GtkApplicationWindow 实例GtkWidget *window;// 使用 gtk_application_new 创建一个新的 GtkApplicationWindow// 并关联到激活的应用程序对象window = gtk_application_window_new(app);// 设置窗口的标题gtk_window_set_title(GTK_WINDOW(window), "Example Application Window");// 设置窗口的默认大小gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);// 显示窗口gtk_widget_show_all(window);
}int main(int argc, char **argv) {GtkApplication *app;int status;// 创建新的 gtk 应用程序app = gtk_application_new("com.example.GtkApplication", G_APPLICATION_FLAGS_NONE);// 当激活信号发生时调用 activate 函数g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);// 运行应用程序,它将等待激活信号status = g_application_run(G_APPLICATION(app), argc, argv);// 清理并退出g_object_unref(app);return status;
}
在上面的代码中,首先包含GTK所需的头文件`<gtk/gtk.h>。接下来,定义一个 activate` 函数,当应用程序被激活时从 main 函数调用。
然后,在 main 函数中创建一个 GtkApplication 实例,设置其应用程序ID为 "com.example.GtkApplication" 并且没有指定特殊标志。通过连接 "activate" 信号到 activate 函数,一旦 GTK 主循环开始,并且应用程序被激活,它就会调用定义好的 activate 函数。
在 activate 函数中,创建了一个 GtkApplicationWindow。注意使用 gtk_application_window_new(app) 来创建窗口,并确保它与正确的`GtkApplication`实例关联。设置窗口的标题和默认大小,并调用`gtk_widget_show_all(window)`来显示窗口和它包含的所有窗口组件。
最后,通过 g_application_run 启动GTK的主事件循环,并在应用程序退出时清理资源。
请注意,这个例子假定正在构建一个使用 GTK+3 的 C 应用程序。如果使用的是 GTK+4,API 会有所变化。而且,构建系统需要配置得当以便找到 GTK 库及其头文件,通常使用 pkg-config 在编译命令中添加正确的标志。例如,如果使用的是 GCC,编译命令可以像这样:
gcc `pkg-config --cflags gtk+-3.0` -o example example.c `pkg-config --libs gtk+-3.0`
这会编译名为 example.c 的源文件,生成名为 example 的输出程序。使用 pkg-config 来取得 GTK 所需的编译和链接标志。
确保在编写代码时关注GTK的版本,因为API之间可能有一些差异。

二、Python
要在Python中使用`GtkApplicationWindow`,可以使用PyGObject,它提供了GTK库的Python绑定。以下是使用`GtkApplicationWindow`的一个基本示例,使用的是GTK+3和Python 3:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtkclass MyWindow(Gtk.ApplicationWindow):# MyWindow类继承自Gtk.ApplicationWindow类def __init__(self, app):super().__init__(title="Example Application Window", application=app)self.set_default_size(200, 200)class MyApp(Gtk.Application):# MyApp类继承自Gtk.Application类def __init__(self):super().__init__()def do_activate(self):# 当应用程序被激活时调用win = MyWindow(self)win.show_all()def do_startup(self):# 启动应用程序时调用Gtk.Application.do_startup(self)app = MyApp()
exit_status = app.run(None)
在这个示例中,首先我们导入了必要的模块,并确保使用的是GTK+3的Python绑定。然后我们定义了一个窗口类`MyWindow`,它继承自`Gtk.ApplicationWindow`,以及一个应用程序类`MyApp`,继承自`Gtk.Application`。在`MyApp`类的`do_activate`方法中,创建了`MyWindow`的一个实例并显示该窗口。
最后创建`MyApp`的一个实例,并调用`run`方法运行应用程序。`run`方法会启动GTK的主事件循环。
在实际的应用程序中,可能还要处理信号和事件,添加按钮、文本框和其他界面元素,配置回调函数等等。这只是使用`GtkApplicationWindow`的最基本的例子。
要运行这段代码应该安装`PyGObject`,通常通过pip安装:
pip install PyGObject
如果正在使用的是GTK+4,则应该调用`gi.require_version('Gtk', '4.0')`,并且相应的API可能略有变化。
相关文章:
【C/Python】GtkApplicationWindow
一、C语言 GtkApplicationWindow 是 GTK 库中用于创建应用程序主窗口的一个控件。 首先,需要确保环境安装了GTK开发库。然后,以下是一个简单的使用 GtkApplicationWindow 创建一个 GTK 应用程序的示例: #include <gtk/gtk.h>static …...
SpringBoot自定义全局事务
1.说明 关于EnableTransactionManagement注解,可加可不加,加注解保证规范性。 2.核心代码 /** * author: wangning * date: 2024/1/23 16:19 */ Aspect Configuration ConditionalOnClass({TransactionManager.class, TransactionFactory.class}) pub…...
【FINEBI】finebi中常用图表类型及其适用场景
柱状图(Bar Chart): 比较不同类别或组之间的数量差异:柱状图可以用于比较不同产品、地区、时间段等的销售额、市场份额等。 显示不同时间段的数据变化:通过绘制柱状图,可以观察到销售额、网站流量等随时间…...
Kaggle竞赛系列_SpaceshipTitanic金牌方案分析_数据分析
文章目录 【文章系列】【前言】【比赛简介】【正文】(一)数据获取(二)数据分析1. 缺失值2. 重复值3. 属性类型分析4. 类别分析5. 分析目标数值占比 (三)属性分析1. 对年龄Age分析(1)…...
Tortoise-tts Better speech synthesis through scaling——TTS论文阅读
笔记地址:https://flowus.cn/share/a79f6286-b48f-42be-8425-2b5d0880c648 【FlowUs 息流】tortoise 论文地址: Better speech synthesis through scaling Abstract: 自回归变换器和DDPM:自回归变换器(autoregressive transfo…...
单元测试工具JEST入门——纯函数的测试
单元测试工具JEST入门——纯函数的测试 什么是测试❓🙉 我只是开发而已?常见单元测试工具 🔧jest的使用👀 首先你得知道一个简单的例子🌰😨 Oops!出现了一些问题👏 高效的持续监听&a…...
Elasticsearch Windows版安装配置
Elasticsearch简介 Elasticsearch是一个开源的搜索文献的引擎,大概含义就是你通过Rest请求告诉它关键字,他给你返回对应的内容,就这么简单。 Elasticsearch封装了Lucene,Lucene是apache软件基金会一个开放源代码的全文检索引擎工…...
安装 vant-ui 实现底部导航栏 Tabbar
本例子使用vue3 介绍 vant-ui 地址:介绍 - Vant 4 (vant-ui.github.io) Vant 是一个轻量、可定制的移动端组件库 安装 通过 npm 安装: # Vue 3 项目,安装最新版 Vant npm i vant # Vue 2 项目,安装 Vant 2 npm i vantlatest-v…...
GitHub国内打不开(解决办法有效)
最近国内访问github.com经常打不开,无法访问。 github网站打不开的解决方法 1.打开网站http://tool.chinaz.com/dns/ ,在A类型的查询中输入 github.com,找出最快的IP地址。 2.修改hosts文件。 在hosts文件中添加: # localhost n…...
Unity之第一人称角色控制
目录 第一人称角色控制 😴1、准备工作 📺2、鼠标控制摄像机视角 🎮3、角色控制 😃4.杂谈 第一人称角色控制 专栏Unity之动画和角色控制-CSDN博客的这一篇也有讲到角色控制器,是第三人称视角的,以小编…...
23种设计模式-结构型模式
1.代理模式 在软件开发中,由于一些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称为"代理"的第三者来实现间接访问.该方案对应的设计模式被称为代理模式. 代理模式(Proxy Design Pattern ) 原始定义是:让你能够提供对象的替代品或其占位符。…...
python -- 流程控制
1、if控制语句:语法格式: age 20 if age > 18:print("我不是小孩子") elif age < 18:print("你永远都是小孩子") else:print("你永远都是小孩子") 2、while循环语句:语法格式: age1 30 …...
Centos 7.9 在线安装 VirtualBox 7.0
1 访问 Linux_Downloads – Oracle VM VirtualBox 2 点击 the Oracle Linux repo file 复制 内容到 /etc/yum.repos.d/. 3 在 /etc/yum.repos.d/ 目录下新建 virtualbox.repo,复制内容到 virtualbox.repo 并 :wq 保存。 [rootlocalhost centos]# cd /etc/yum.rep…...
mysql之基本查询
基本查询 一、SELECT 查询语句 一、SELECT 查询语句 查询所有列 1 SELECT *FORM emp;查询指定字段 SELECT empno,ename,job FROM emp;给字段取别名 SELECT empno 员工编号 FROM emp; SELECT empno 员工编号,ename 姓名,job 岗位 FROM emp; SELECT empno AS 员工编号,ename …...
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之DataPanel组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之DataPanel组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、DataPanel组件 数据面板组件,用于将多个数据占比情况使用占比图进…...
qt5-入门
参考: qt学习指南 Qt5和Qt6的区别-CSDN博客 Qt 学习之路_w3cschool Qt教程,Qt5编程入门教程(非常详细) 本地环境: win10专业版,64位 技术选择 Qt5力推QML界面编程。QML类似HTML,可以借助CSS进…...
【重磅发布】已开放!模型师入驻、转格式再升级、3D展示框架全新玩法…
1月23日,老子云正式发布全新版本。此次新版本包含多板块功能上线和升级,为用户带来了含模型师入驻、三维格式在线转换升级、模型免费增值权益开放、全新3D展示框架等一系列精彩内容! 1月23日,老子云正式发布全新版本。此次新版本…...
Qt 基础之QDataTime
Qt 基础之QDataTime 引言一、获取(设定)日期和时间二、时间戳三、时间计算 (重载运算符) 引言 QDataTime是Qt框架中用于处理日期和时间的类。它提供了操作和格式化日期、时间和日期时间组合的功能。QDataTime可以用于存储和检索日期和时间、比较日期和时间、对日期和时间执行算…...
美国将限制中国,使用Azure、AWS等云,训练AI大模型
1月29日,美国商务部在Federal Register(联邦公报)正式公布了,《采取额外措施应对与重大恶意网络行为相关的国家紧急状态》提案。 该提案明确要求美国IaaS(云服务)厂商在提供云服务时,要验证外国…...
智能指针|巨巨巨详细
智能指针 shared_ptrshared_ptr的基本用法使用shared_ptr要注意的问题 unique_ptr独占的智能指针weak_ptr弱引用的智能指针weak_ptr的基本用法weak_ptr返回this指针weak_ptr解决循环引用问题 weak_ptr使用注意事项 智能指针 C程序设计中使用堆内存是非常频繁的操作࿰…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
