当前位置: 首页 > news >正文

【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之间可能有一些差异。

57763b638ca348cc8780a2fc09ac2701.png

二、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 库中用于创建应用程序主窗口的一个控件。 首先&#xff0c;需要确保环境安装了GTK开发库。然后&#xff0c;以下是一个简单的使用 GtkApplicationWindow 创建一个 GTK 应用程序的示例&#xff1a; #include <gtk/gtk.h>static …...

SpringBoot自定义全局事务

1.说明 关于EnableTransactionManagement注解&#xff0c;可加可不加&#xff0c;加注解保证规范性。 2.核心代码 /** * author: wangning * date: 2024/1/23 16:19 */ Aspect Configuration ConditionalOnClass({TransactionManager.class, TransactionFactory.class}) pub…...

【FINEBI】finebi中常用图表类型及其适用场景

柱状图&#xff08;Bar Chart&#xff09;&#xff1a; 比较不同类别或组之间的数量差异&#xff1a;柱状图可以用于比较不同产品、地区、时间段等的销售额、市场份额等。 显示不同时间段的数据变化&#xff1a;通过绘制柱状图&#xff0c;可以观察到销售额、网站流量等随时间…...

Kaggle竞赛系列_SpaceshipTitanic金牌方案分析_数据分析

文章目录 【文章系列】【前言】【比赛简介】【正文】&#xff08;一&#xff09;数据获取&#xff08;二&#xff09;数据分析1. 缺失值2. 重复值3. 属性类型分析4. 类别分析5. 分析目标数值占比 &#xff08;三&#xff09;属性分析1. 对年龄Age分析&#xff08;1&#xff09;…...

Tortoise-tts Better speech synthesis through scaling——TTS论文阅读

笔记地址&#xff1a;https://flowus.cn/share/a79f6286-b48f-42be-8425-2b5d0880c648 【FlowUs 息流】tortoise 论文地址&#xff1a; Better speech synthesis through scaling Abstract: 自回归变换器和DDPM&#xff1a;自回归变换器&#xff08;autoregressive transfo…...

单元测试工具JEST入门——纯函数的测试

单元测试工具JEST入门——纯函数的测试 什么是测试❓&#x1f649; 我只是开发而已&#xff1f;常见单元测试工具 &#x1f527;jest的使用&#x1f440; 首先你得知道一个简单的例子&#x1f330;&#x1f628; Oops&#xff01;出现了一些问题&#x1f44f; 高效的持续监听&a…...

Elasticsearch Windows版安装配置

Elasticsearch简介 Elasticsearch是一个开源的搜索文献的引擎&#xff0c;大概含义就是你通过Rest请求告诉它关键字&#xff0c;他给你返回对应的内容&#xff0c;就这么简单。 Elasticsearch封装了Lucene&#xff0c;Lucene是apache软件基金会一个开放源代码的全文检索引擎工…...

安装 vant-ui 实现底部导航栏 Tabbar

本例子使用vue3 介绍 vant-ui 地址&#xff1a;介绍 - Vant 4 (vant-ui.github.io) Vant 是一个轻量、可定制的移动端组件库 安装 通过 npm 安装&#xff1a; # Vue 3 项目&#xff0c;安装最新版 Vant npm i vant # Vue 2 项目&#xff0c;安装 Vant 2 npm i vantlatest-v…...

GitHub国内打不开(解决办法有效)

最近国内访问github.com经常打不开&#xff0c;无法访问。 github网站打不开的解决方法 1.打开网站http://tool.chinaz.com/dns/ &#xff0c;在A类型的查询中输入 github.com&#xff0c;找出最快的IP地址。 2.修改hosts文件。 在hosts文件中添加&#xff1a; # localhost n…...

Unity之第一人称角色控制

目录 第一人称角色控制 &#x1f634;1、准备工作 &#x1f4fa;2、鼠标控制摄像机视角 &#x1f3ae;3、角色控制 &#x1f603;4.杂谈 第一人称角色控制 专栏Unity之动画和角色控制-CSDN博客的这一篇也有讲到角色控制器&#xff0c;是第三人称视角的&#xff0c;以小编…...

23种设计模式-结构型模式

1.代理模式 在软件开发中,由于一些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称为"代理"的第三者来实现间接访问.该方案对应的设计模式被称为代理模式. 代理模式(Proxy Design Pattern ) 原始定义是&#xff1a;让你能够提供对象的替代品或其占位符。…...

python -- 流程控制

1、if控制语句&#xff1a;语法格式&#xff1a; age 20 if age > 18:print("我不是小孩子") elif age < 18:print("你永远都是小孩子") else:print("你永远都是小孩子") 2、while循环语句&#xff1a;语法格式&#xff1a; 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&#xff0c;复制内容到 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组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之DataPanel组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、DataPanel组件 数据面板组件&#xff0c;用于将多个数据占比情况使用占比图进…...

qt5-入门

参考&#xff1a; qt学习指南 Qt5和Qt6的区别-CSDN博客 Qt 学习之路_w3cschool Qt教程&#xff0c;Qt5编程入门教程&#xff08;非常详细&#xff09; 本地环境&#xff1a; win10专业版&#xff0c;64位 技术选择 Qt5力推QML界面编程。QML类似HTML&#xff0c;可以借助CSS进…...

【重磅发布】已开放!模型师入驻、转格式再升级、3D展示框架全新玩法…

1月23日&#xff0c;老子云正式发布全新版本。此次新版本包含多板块功能上线和升级&#xff0c;为用户带来了含模型师入驻、三维格式在线转换升级、模型免费增值权益开放、全新3D展示框架等一系列精彩内容&#xff01; 1月23日&#xff0c;老子云正式发布全新版本。此次新版本…...

Qt 基础之QDataTime

Qt 基础之QDataTime 引言一、获取(设定)日期和时间二、时间戳三、时间计算 (重载运算符) 引言 QDataTime是Qt框架中用于处理日期和时间的类。它提供了操作和格式化日期、时间和日期时间组合的功能。QDataTime可以用于存储和检索日期和时间、比较日期和时间、对日期和时间执行算…...

美国将限制中国,使用Azure、AWS等云,训练AI大模型

1月29日&#xff0c;美国商务部在Federal Register&#xff08;联邦公报&#xff09;正式公布了&#xff0c;《采取额外措施应对与重大恶意网络行为相关的国家紧急状态》提案。 该提案明确要求美国IaaS&#xff08;云服务&#xff09;厂商在提供云服务时&#xff0c;要验证外国…...

智能指针|巨巨巨详细

智能指针 shared_ptrshared_ptr的基本用法使用shared_ptr要注意的问题 unique_ptr独占的智能指针weak_ptr弱引用的智能指针weak_ptr的基本用法weak_ptr返回this指针weak_ptr解决循环引用问题 weak_ptr使用注意事项 智能指针 C程序设计中使用堆内存是非常频繁的操作&#xff0…...

5个理由让你选择LAV Filters:解决媒体播放兼容性问题的全能解码方案

5个理由让你选择LAV Filters&#xff1a;解决媒体播放兼容性问题的全能解码方案 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters 在数字媒体爆炸的时代&#x…...

5大核心模块全面释放NVIDIA显卡潜能:从新手到专家的调校指南

5大核心模块全面释放NVIDIA显卡潜能&#xff1a;从新手到专家的调校指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾疑惑为什么同款显卡在不同游戏中的表现差异显著&#xff1f;为什么专业…...

从TCP BBR到网卡中断绑定:给K8s节点和游戏服务器做一次网络延迟‘大保健’

从TCP BBR到网卡中断绑定&#xff1a;给K8s节点和游戏服务器做一次网络延迟‘大保健’ 在云原生和高性能计算领域&#xff0c;网络延迟的毫秒级波动可能引发连锁反应——Kubernetes集群中某个Pod的响应延迟会导致整个微服务链路雪崩&#xff0c;而游戏服务器上50ms的卡顿足以让…...

物联网毕业设计本科生开题指导

【单片机毕业设计项目分享系列】 &#x1f525; 这里是DD学长&#xff0c;单片机毕业设计及享100例系列的第一篇&#xff0c;目的是分享高质量的毕设作品给大家。 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的单片机项目缺少创新和亮点…...

REX-UniNLU与LaTeX协同工作:智能学术论文写作助手

REX-UniNLU与LaTeX协同工作&#xff1a;智能学术论文写作助手 科研写作的痛点&#xff0c;只有经历过的人才懂&#xff1a;反复调整格式、手动整理参考文献、绞尽脑汁写图表描述... 但现在&#xff0c;AI技术正在改变这一切。 1. 学术写作的新革命 如果你正在写学术论文&#…...

Yi-Coder-1.5B实战:快速生成Python算法与前端组件代码

Yi-Coder-1.5B实战&#xff1a;快速生成Python算法与前端组件代码 1. 开篇&#xff1a;你的随身编程助手 想象一下&#xff0c;你正在为一个新项目搭建框架&#xff0c;需要写一个快速排序算法&#xff0c;或者需要一个美观的React按钮组件。你打开搜索引擎&#xff0c;在无数…...

Janus-Pro-7B播客制作:音频波形图识别+内容摘要与章节标记生成

Janus-Pro-7B播客制作&#xff1a;音频波形图识别内容摘要与章节标记生成 1. 引言&#xff1a;播客制作的新思路 播客制作通常需要大量的人工工作&#xff1a;听完整期节目、标记关键章节、撰写内容摘要、制作时间轴标记。这个过程耗时耗力&#xff0c;特别是对于长篇播客内容…...

OpenClaw+gemma-3-12b-it内容助手:自动生成技术文章与排版

OpenClawgemma-3-12b-it内容助手&#xff1a;自动生成技术文章与排版 1. 为什么需要自动化内容生产线 作为技术自媒体创作者&#xff0c;我每周需要产出3-5篇深度技术文章。传统写作流程中&#xff0c;最耗时的不是核心内容创作&#xff0c;而是反复调整格式、插入代码块、优…...

Changelog.com贡献指南:如何参与这个活跃的开源项目

Changelog.com贡献指南&#xff1a;如何参与这个活跃的开源项目 【免费下载链接】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对比&#xff1a;开源可控性vs商业易用性深度分析 想用AI克隆自己的声音&#xff0c;或者让喜欢的角色开口唱歌&#xff1f;现在市面上有两大主流选择&#xff1a;开源的RVC和商业化的ElevenLabs。一个免费但需要折腾&#xff0c;一个付费但开箱即用。到底哪个…...