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

【C/Python】Gtk部件ListStore的使用

一、C语言

在GTK中,`Gtk.ListStore`是一个实现了`Gtk.TreeModel`接口的存储模型,用于在如`Gtk.TreeView`这样的控件中存储数据。以下是一个简单的使用`Gtk.ListStore`的C语言示例,该示例创建了一个列表,并在图形界面中显示:

#include <gtk/gtk.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);// 创建一个新的窗口GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window), "ListStore Example");gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);// 创建ListStore,其中有两列,分别存储字符串和整数GtkListStore *store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);// 填充ListStoreGtkTreeIter iter;gtk_list_store_append(store, &iter);gtk_list_store_set(store, &iter, 0, "First item", 1, 10, -1);gtk_list_store_append(store, &iter);gtk_list_store_set(store, &iter, 0, "Second item", 1, 20, -1);// 创建TreeView,设置为使用ListStore模型GtkWidget *tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));// 为实现良好的内存管理,将Model和View进行解耦g_object_unref(store);// 为TreeView添加两列:Text Column 和 Integer ColumnGtkCellRenderer *renderer = gtk_cell_renderer_text_new();GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes("String Column", renderer, "text", 0, NULL);gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);renderer = gtk_cell_renderer_text_new();column = gtk_tree_view_column_new_with_attributes("Integer Column", renderer, "text", 1, NULL);gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);// 将TreeView添加到窗口中gtk_container_add(GTK_CONTAINER(window), tree_view);// 显示所有窗口和控件gtk_widget_show_all(window);// 进入主事件循环gtk_main();return 0;
}

编译运行:

gcc `pkg-config --cflags gtk+-3.0` -o ListStore ListStore.c `pkg-config --libs gtk+-3.0`
./ListStore 

二、python1d8221ce17254792b15604aebea2a7d1.png

在Python中,要使用`Gtk.ListStore`,通常与`Gtk.TreeView`结合来展示列表。这里提供一个使用Python的Gtk模块(通常是`PyGObject`包)和`Gtk.ListStore`的示例。如果尚未安装`PyGObject`,你可能需要首先安装它。在大多数Linux发行版上,可以通过包管理器来安装,例如在Ubuntu上可以使用`apt`命令:

sudo apt install python3-gi

以下是创建一个简单窗口并使用`Gtk.ListStore`的完整Python示例:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtkclass ListStoreExample(Gtk.Window):def __init__(self):Gtk.Window.__init__(self, title="ListStore Example")self.set_default_size(200, 200)# 创建一个Gtk.ListStore,其中包含了一个字符串和一个整数字段self.liststore = Gtk.ListStore(str, int)# 添加数据行self.liststore.append(["First Item", 1])self.liststore.append(["Second Item", 2])# 创建一个Gtk.TreeView,并设置model为之前的ListStoretreeview = Gtk.TreeView(model=self.liststore)# 创建第一列-字符串列renderer_text = Gtk.CellRendererText()column_text = Gtk.TreeViewColumn("String", renderer_text, text=0)treeview.append_column(column_text)# 创建第二列-整数列renderer_num = Gtk.CellRendererText()column_num = Gtk.TreeViewColumn("Number", renderer_num, text=1)treeview.append_column(column_num)# 将TreeView添加到窗口中self.add(treeview)# 创建窗口实例
win = ListStoreExample()
win.connect("destroy", Gtk.main_quit)
win.show_all()
# 进入GTK主循环
Gtk.main()

这个程序创建了一个包含两列(一个字符串列和一个整数列)的`Gtk.ListStore`。然后在`Gtk.TreeView`中用这个ListStore作为数据模型,并添加了相应的列与渲染器来显示数据。最后,它将TreeView添加到窗口并显示出来。
当然,除了这里展示的静态数据,可以根据需要动态添加、删除或修改ListStore中的数据。运行上面的程序之后,会看到包含了数据的窗口。当关闭窗口,GTK的主事件循环结束,程序随之退出。

运行:

python3 ListStore.py

 

 

 

 

 

相关文章:

【C/Python】Gtk部件ListStore的使用

一、C语言 在GTK中&#xff0c;Gtk.ListStore是一个实现了Gtk.TreeModel接口的存储模型&#xff0c;用于在如Gtk.TreeView这样的控件中存储数据。以下是一个简单的使用Gtk.ListStore的C语言示例&#xff0c;该示例创建了一个列表&#xff0c;并在图形界面中显示&#xff1a; …...

Swift 入门之自定义类型的模式匹配(Pattern Matching)

概览 小伙伴们都知道 Swift 是一门简洁、类型安全、极富表现力以及“性感迷人”的编程语言。 和大多数语言一样&#xff0c;在 Swift 中也有一些隐藏着的、不为人知的宝藏特性。利用它们我们可以极大增加撸码的愉悦和成就感。 其中&#xff0c;模式匹配&#xff08;Pattern …...

MySQL-----DML基础操作

DML语句 DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增删改操作。 ▶ 添加数据(INSERT) 【语法】 1. 给指定字段添加数据 INSERTO 表名 (字段名1&#xff0c;字段名2,...) VALUES (值1&#xff0c;值2,...); 2.给全…...

提前祝大家新年好!来看看社区 2023 都得了哪些奖吧

大噶好&#xff01;转眼马上就是“龙”历新年啦&#xff0c;不知道大家这周的工作热情怎么样呢&#xff1f;小陈的心已经在殷切期盼回家过年了&#xff5e; RTE 开发者社区预祝诸位&#xff1a; 2024 年 &#x1f432;龙年添财气&#xff0c;万事皆胜意&#xff01; 回顾过去…...

Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”

前言 随着业务数据的增加&#xff08;比如电商业务中&#xff0c;随着用户规模和商品数量的增加&#xff09;&#xff0c;就需要 Redis 能保存更多的数据。你可能会想到使用 Redis 切片集群&#xff0c;把数据分散保存到不同的实例上。但是这样做的话&#xff0c;如果要保存的…...

qt-C++笔记之contains()和isEmpty()函数、以及部分其他函数列举

qt-C笔记之contains()和isEmpty()函数、以及部分其他函数列举 code review! 文章目录 qt-C笔记之contains()和isEmpty()函数、以及部分其他函数列举contains()isEmpty() 类似的其他函数列举通用容器类函数字符串特有函数 在Qt C开发中&#xff0c; contains() 和 isEmpty()…...

极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁

文章目录 前言幻兽帕鲁私服详细部署教程查看服务器开始游戏自定义游戏参数配置 前言 行业资讯 《幻兽帕鲁》的火爆对开发商 Pocketpair 来说&#xff0c;代价是巨大的。该游戏的成功让首席执行官沟部拓郎最近在推特上表示&#xff0c;他可能因服务器运营费用而面临破产。据他透…...

MagicVideo-V2:多阶段高保真视频生成框架

本项工作介绍了MagicVideo-V2&#xff0c;将文本到图像模型、视频运动生成器、参考图像embedding模块和帧内插模块集成到端到端的视频生成流程中。由于这些架构设计的好处&#xff0c;MagicVideo-V2能够生成具有极高保真度和流畅度的美观高分辨率视频。通过大规模用户评估&…...

【三】【C++】类与对象(二)

类的六个默认成员函数 在C中&#xff0c;有六个默认成员函数&#xff0c;它们是编译器在需要的情况下自动生成的成员函数&#xff0c;如果你不显式地定义它们&#xff0c;编译器会自动提供默认实现。这些默认成员函数包括&#xff1a; 默认构造函数 (Default Constructor)&…...

ffmpeg 输入文件,输入出udp-ts 指定pid

要使用FFmpeg将输入文件转换为UDP传输流&#xff08;TS&#xff09;并指定特定的PID&#xff0c;您可以使用以下命令&#xff1a; ffmpeg -i input_file -c:v libx264 -preset ultrafast -tune zerolatency -f mpegts -map 0:v:0 -map 0:a:0 -pid 0x12345678 udp://output_addr…...

自研人工智能小工具-小蜜蜂(国外ChatGpt的平替)

国内有非常多好用的人工智能工具&#xff0c;但均无法完全替代国外ChatGpt。 ChatGPT相较于其他国内工具的优势在于以下几点&#xff1a; 创新的语言生成能力&#xff1a;ChatGPT是由OpenAI开发的先进的自然语言生成模型&#xff0c;它采用了大规模的预训练和精细调整方法。因此…...

Stable Diffusion 模型下载:ReV Animated

模型介绍 该模型能够创建 2.5D 类图像生成。此模型是检查点合并&#xff0c;这意味着它是其他模型的产物&#xff0c;以创建从原始模型派生的产品。 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者s6yx文件名称revAnimated_v122EOL.safetensors文件大小5.13GB 生成案例 …...

某赛通电子文档安全管理系统 PolicyAjax SQL注入漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…...

Prometheus 采集Oracle监控数据

前言 oracledb_exporter是一个开源的Prometheus Exporter,用于从Oracle数据库中收集关键指标并将其暴露给Prometheus进行监控和告警。它可以将Oracle数据库的性能指标转换为Prometheus所需的格式,并提供一些默认的查询和指标。 download Oracle Oracle Windows Install …...

【ARM Trace32(劳特巴赫) 使用介绍 3.1 -- 不 attach core 直接访问 memory】

文章目录 背景介绍背景介绍 在使用 trace32 时在有些场景需要不 attach core 然后去读写 memory,比如在某些情况下 core 已经挂死连接不上了,这个时候需要dump内存,这个时候需要怎做呢? print "test for memory access directly";SYStem.OPTION WAITRESET OF…...

MySQL事务和SQL优化

目录 一、什么是事务 二、事务的特征 三、MySQL使用事务 3.1 实现流程&#xff1a; 实现截图&#xff1a; 3.2 实例演示&#xff1a; 四、事务的隔离级别 幻读&#xff1a; 如何解决&#xff1a; 脏读&#xff1a; 不可重复读&#xff1a; 幻读和不可重复读两者区别…...

[C语言]结构体初识

结构体定义 结构体是一些值的集合,被成为成员变量,结构的每个成员可以是不同类型的变量 声明: 定义了一个结构体比如以张蓝图,不占据内存,当你创建了一个结构体变量时,才占空间. #include<stdio.h>//struct 为结构体关键字, student 自定义结构体名称 struct student …...

跨平台开发:浅析uni-app及其他主流APP开发方式

随着智能手机的普及&#xff0c;移动应用程序&#xff08;APP&#xff09;的需求不断增长。开发一款优秀的APP&#xff0c;不仅需要考虑功能和用户体验&#xff0c;还需要选择一种适合的开发方式。随着技术的发展&#xff0c;目前有多种主流的APP开发方式可供选择&#xff0c;其…...

MyBatis常见面试题汇总

说一下MyBatis执行流程&#xff1f; MyBatis是一款优秀的基于Java的持久层框架&#xff0c;它内部封装了JDBC&#xff0c;使开发者只需要关注SQL语句本身&#xff0c;而不需要花费精力去处理加载驱动、创建连接等的过程&#xff0c;MyBatis的执行流程如下&#xff1a; 加载配…...

juc并发线程学习笔记(一)

本系列会更新我在学习juc时的笔记和自己的一些思想记录。如有问题欢迎联系。 并发编程 进程与线程 1.进程和线程的概念 程序是静态的&#xff0c;进程是动态的 进程 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载…...

告别抓包失败!保姆级配置:让Burp+Proxifier稳定抓取任意微信小程序

微信小程序抓包实战&#xff1a;BurpProxifier零失败配置指南 每次调试微信小程序接口都像在玩捉迷藏&#xff1f;明明按照教程一步步操作&#xff0c;却总在最后一步功亏一篑。作为经历过数十次抓包失败的过来人&#xff0c;我总结出一套"一次配置终身受用"的解决方…...

SpringBoot源码企业公司ERP进销存管理系统JavaWeb项目前后端分离Vue实现方案

SpringBoot源码企业公司ERP进销存管理系统JavaWeb项目前后端分离Vue一、项目背景与目标SpringBoot源码企业公司ERP进销存管理系统JavaWeb项目前后端分离Vue随着企业信息化管理的需求日益增长&#xff0c;ERP&#xff08;企业资源计划&#xff09;系统成为企业提升管理效率、优化…...

避开这5个坑!WPS宏调用DeepSeek API识别标题的实战经验分享

WPS宏调用DeepSeek API识别标题的五个典型陷阱与实战解决方案 当技术文档超过20页时&#xff0c;手动设置标题样式和目录的工作量会呈指数级增长。去年我为某科技公司处理一份87页的技术白皮书时&#xff0c;团队花了整整两天时间调整标题层级&#xff0c;而最终因为格式不一致…...

为什么80%AI率降完后还有残留?根本原因在这

你用了降AI工具&#xff0c;处理前90%&#xff0c;处理后17%。 17%达标了&#xff0c;但还是有AI率残留。或者更糟&#xff0c;处理后22%&#xff0c;还是没过。 为什么工具处理后AI率不能降到0%&#xff1f;残留从哪来&#xff1f;怎么进一步处理&#xff1f; 残留AI率的三…...

TCP 是用来解决什么问题:从 IP 的不可靠到可靠的端到端通信

TCP 是用来解决什么问题&#xff1a;从 IP 的不可靠到可靠的端到端通信01. 前言&#xff1a;为什么有了 IP 还不够&#xff1f;02. IP 协议的四大先天缺陷03. TCP 要解决的六大核心问题04. 问题一&#xff1a;丢包 → 确认 超时重传4.1 问题描述4.2 TCP 的解决方案05. 问题二&…...

分布式微电网能源交易算法matlab源代码, 代码按照高水平文章复现,保证正确 孤岛微电网之间...

分布式微电网能源交易算法matlab源代码&#xff0c; 代码按照高水平文章复现&#xff0c;保证正确 孤岛微电网之间的能源交易问题&#xff0c;提出了一种分布式算法。 这个问题由几个通过任意拓扑交换能量流的岛屿微网格组成。 提出了一种基于次梯度的开销最小化算法&#xff0…...

毕业党速看:这款 AI 论文神器太疯狂,输入标题直接生成万字长文

赶 due 党、论文特困生直接狂喜&#xff01;谁懂啊家人们&#xff0c;以前写论文从选题到憋出万字初稿&#xff0c;至少得熬半个月&#xff0c;现在输入一个论文标题&#xff0c;短短 20 分钟就能自动生成结构完整、逻辑通顺、带真实参考文献的万字长文&#xff0c;从摘要、引言…...

Atlas 800I A2实战:5小时搞定DeepSeek V3 W4A8量化全流程(含显存优化技巧)

Atlas 800I A2实战&#xff1a;5小时搞定DeepSeek V3 W4A8量化全流程&#xff08;含显存优化技巧&#xff09; 在AI模型部署领域&#xff0c;量化技术正成为突破硬件限制的关键手段。当我们面对Atlas 800I A2这样的高性能服务器时&#xff0c;如何充分发挥其64GB显存优势&#…...

如何快速掌握DownKyi:从新手到专家的完整视频下载指南

如何快速掌握DownKyi&#xff1a;从新手到专家的完整视频下载指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#…...

手写数字识别在FPGA上的暴力美学

fpga实现cnn神经网络加速 手写字硬件加速 FPGA artix7-100t 纯verilog编写 神经网络硬件加速 使用ov5640摄像头dvp接口 verilog实现手写字识别 包括卷积层、全连接层、池化层、softmax&#xff0c;有效减轻误识别问题注意: 该项目并未使用到arm核&#xff0c;是使用传统…...