【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程序设计中使用堆内存是非常频繁的操作࿰…...
5个理由让你选择LAV Filters:解决媒体播放兼容性问题的全能解码方案
5个理由让你选择LAV Filters:解决媒体播放兼容性问题的全能解码方案 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters 在数字媒体爆炸的时代&#x…...
5大核心模块全面释放NVIDIA显卡潜能:从新手到专家的调校指南
5大核心模块全面释放NVIDIA显卡潜能:从新手到专家的调校指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾疑惑为什么同款显卡在不同游戏中的表现差异显著?为什么专业…...
从TCP BBR到网卡中断绑定:给K8s节点和游戏服务器做一次网络延迟‘大保健’
从TCP BBR到网卡中断绑定:给K8s节点和游戏服务器做一次网络延迟‘大保健’ 在云原生和高性能计算领域,网络延迟的毫秒级波动可能引发连锁反应——Kubernetes集群中某个Pod的响应延迟会导致整个微服务链路雪崩,而游戏服务器上50ms的卡顿足以让…...
物联网毕业设计本科生开题指导
【单片机毕业设计项目分享系列】 🔥 这里是DD学长,单片机毕业设计及享100例系列的第一篇,目的是分享高质量的毕设作品给大家。 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的单片机项目缺少创新和亮点…...
REX-UniNLU与LaTeX协同工作:智能学术论文写作助手
REX-UniNLU与LaTeX协同工作:智能学术论文写作助手 科研写作的痛点,只有经历过的人才懂:反复调整格式、手动整理参考文献、绞尽脑汁写图表描述... 但现在,AI技术正在改变这一切。 1. 学术写作的新革命 如果你正在写学术论文&#…...
Yi-Coder-1.5B实战:快速生成Python算法与前端组件代码
Yi-Coder-1.5B实战:快速生成Python算法与前端组件代码 1. 开篇:你的随身编程助手 想象一下,你正在为一个新项目搭建框架,需要写一个快速排序算法,或者需要一个美观的React按钮组件。你打开搜索引擎,在无数…...
Janus-Pro-7B播客制作:音频波形图识别+内容摘要与章节标记生成
Janus-Pro-7B播客制作:音频波形图识别内容摘要与章节标记生成 1. 引言:播客制作的新思路 播客制作通常需要大量的人工工作:听完整期节目、标记关键章节、撰写内容摘要、制作时间轴标记。这个过程耗时耗力,特别是对于长篇播客内容…...
OpenClaw+gemma-3-12b-it内容助手:自动生成技术文章与排版
OpenClawgemma-3-12b-it内容助手:自动生成技术文章与排版 1. 为什么需要自动化内容生产线 作为技术自媒体创作者,我每周需要产出3-5篇深度技术文章。传统写作流程中,最耗时的不是核心内容创作,而是反复调整格式、插入代码块、优…...
Changelog.com贡献指南:如何参与这个活跃的开源项目
Changelog.com贡献指南:如何参与这个活跃的开源项目 【免费下载链接】changelog.com Changelog is news and podcast for developers. This is our open source platform. 项目地址: https://gitcode.com/gh_mirrors/ch/changelog.com Changelog.com是一个使…...
RVC与ElevenLabs对比:开源可控性vs商业易用性深度分析
RVC与ElevenLabs对比:开源可控性vs商业易用性深度分析 想用AI克隆自己的声音,或者让喜欢的角色开口唱歌?现在市面上有两大主流选择:开源的RVC和商业化的ElevenLabs。一个免费但需要折腾,一个付费但开箱即用。到底哪个…...
