当前位置: 首页 > 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

 

 

 

 

 

http://www.lryc.cn/news/293778.html

相关文章:

  • Swift 入门之自定义类型的模式匹配(Pattern Matching)
  • MySQL-----DML基础操作
  • 提前祝大家新年好!来看看社区 2023 都得了哪些奖吧
  • Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”
  • qt-C++笔记之contains()和isEmpty()函数、以及部分其他函数列举
  • 极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁
  • MagicVideo-V2:多阶段高保真视频生成框架
  • 【三】【C++】类与对象(二)
  • ffmpeg 输入文件,输入出udp-ts 指定pid
  • 自研人工智能小工具-小蜜蜂(国外ChatGpt的平替)
  • Stable Diffusion 模型下载:ReV Animated
  • 某赛通电子文档安全管理系统 PolicyAjax SQL注入漏洞复现
  • Prometheus 采集Oracle监控数据
  • 【ARM Trace32(劳特巴赫) 使用介绍 3.1 -- 不 attach core 直接访问 memory】
  • MySQL事务和SQL优化
  • [C语言]结构体初识
  • 跨平台开发:浅析uni-app及其他主流APP开发方式
  • MyBatis常见面试题汇总
  • juc并发线程学习笔记(一)
  • 力扣热门100题刷题笔记 - 3.无重复字符的最长子串
  • 达梦数据库死锁排查与解决
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件
  • CICD注册和使用gitlab-runner常见问题
  • 关于Django部署
  • 计算机网络——01什么是InterNet
  • 刷存在感,Excel转Protobuf/Json通用配置文件
  • docker 开放tcp连接供idea等其他外部工具开放使用
  • 虚拟机(VMware)ubuntu16.04 直接连接网口设备 USRP 吊舱
  • 告别繁杂的状态管理:Zustand 的简洁之道
  • CentOS磁盘扩容