【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);

    // 填充ListStore
    GtkTreeIter 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 Column
    GtkCellRenderer *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 Gtk

class 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为之前的ListStore
        treeview = 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

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/370159.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Vue项目中使用videojs播放本地mp4的项目】

目录 以下是一个使用video.js播放本地mp4文件的Vue项目代码示例&#xff1a;1. 首先&#xff0c;在终端中使用以下命令安装video.js和video.js插件&#xff1a;2. 在Vue组件中&#xff0c;引入video.js和videojs-youtube插件&#xff1a;3. 配置video-js.css文件&#xff0c;可…

DS:时间复杂度和空间复杂度

创作不易&#xff0c;感谢三连&#xff01; 一、算法 1.1 什么是算法 算法(Algorithm):就是定义良好的计算过程&#xff0c;他取一个或一组的值为输入&#xff0c;并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤&#xff0c;用来将输入数据转化成输出结果。…

AI新工具(20240204)pot-desktop - 为用户提供便捷的文字翻译和识别功能;ChatALL - 能够同时向多个AI机器人发送提示

pot-desktop - 为用户提供便捷的文字翻译和识别功能 pot-desktop pot-desktop是一款备受欢迎的跨平台划词翻译和OCR软件&#xff0c;为用户提供便捷的文字翻译和识别功能。 功能点&#xff1a; 划词翻译&#xff1a;用户只需将鼠标光标悬停在需要翻译的文字上&#xff0c;po…

028 方法的重载

方法重载的定义 使用案例 public static void main(String[] args) {// 匹配到max(int a, int b)System.out.println(max(1, 3));// 匹配到max(double a, double b)System.out.println(max(1L, 3L));// 匹配到max(double a, double b, double c, double d)&#xff0c;int自动…

3D 转换

1&#xff0c;3D的特点&#xff1a; 近小远大 物体后面遮挡不可见 2&#xff0c;3D移动 translate3d 3D移动在2D移动的基础上多加了一个可以移动的方向&#xff0c;就是z轴方向 transform&#xff1a;translateX&#xff08;100px&#xff09;&#xff1a;仅仅是在x轴上移动…

MySQL查询缓存

MySQL查询缓存 MySQL在查询的时候首先会查询缓存&#xff0c;如果缓存命中的话就直接返回结果&#xff0c;不需要解析sql语句&#xff0c;也不会生成执行计划&#xff0c;更不会执行&#xff1b;如果没有命中缓存&#xff0c;则再进行SQL解析以及进行查询&#xff0c;并将结果返…

steam搬砖项目赚钱吗?操作流程看这一篇就够了

很多人应该听说过steam&#xff0c;它是国外一款知名的游戏社交平台&#xff0c;也是目前世界上最大的游戏平台之一。而steam搬砖项目&#xff0c;关键就是靠信息差。我们要做的就是在steam以低价买入道具装备&#xff0c;然后上架到网易buff卖出&#xff0c;赚取差价。 什么人…

mac下载工具:JDownloader 2 for Mac 中文版

JDownloader是一款开源的下载管理工具&#xff0c;主要使用Java编程语言开发&#xff0c;因此它能够在支持Java的操作系统上运行&#xff0c;包括Windows、Linux和Mac OS。这款软件专门为那些需要通过网盘下载文件的用户提供便利&#xff0c;它支持众多流行的网盘服务&#xff…

机器学习 | 解析聚类算法在数据检测中的应用

目录 初识聚类算法 聚类算法实现流程 模型评估 算法优化 特征降维 探究用户对物品类别的喜好细分(实操) 初识聚类算法 聚类算法是一种无监督学习方法&#xff0c;用于将数据集中的对象按照相似性分组。它旨在发现数据中的内在结构和模式&#xff0c;将具有相似特征的数据…

MySQL运维实战(5.3) MySQL数据乱码的一些情况

作者&#xff1a;俊达 表数据乱码 表数据出现乱码的情况通常是由于数据的真实编码与相关参数不一致引起的&#xff0c;其中包括常见的参数如character_set_client、character_set_results、字段编码以及终端编码等。确保这些参数保持一致&#xff0c;可以有效预防和解决乱码问…

【Web】CVE-2021-22448 Log4j RCE漏洞学习

目录 复现流程 漏洞原理 复现流程 启动HTTP->启动LDAP->执行Log4j vps起个http服务,放好Exploit.class这个恶意字节码 LDAPRefServer作为恶意LDAP服务器 import java.net.InetAddress; import java.net.MalformedURLException; import java.net.URL; import javax.ne…

C++ 动态规划 线性DP 最长共同子序列

给定两个长度分别为 N 和 M 的字符串 A 和 B &#xff0c;求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 N 和 M 。 第二行包含一个长度为 N 的字符串&#xff0c;表示字符串 A 。 第三行包含一个长度为 M 的字符串&#xff0c;表…

程序员可以考取哪些证书更有用

IT行业有哪些证书 IT行业有许多证书可以考取&#xff0c;以下是一些主要的和有价值的证书相关信息&#xff1a; IT行业常用证书一览表 认证机构认证领域证书名称能力概述思科认证网络工程师CCNA、CCNP和CCIE等不同级别思科公司颁发的网络开发运维架构能力微软认证系统开发工程…

爬虫-网络空间微博信息管理系统的设计与实现-计算机毕业设计源码85633

摘 要 本论文主要论述了如何使用django框架开发一个网络空间微博管理信息系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述该系统的当前背景以及系统开发的目的&#xff0c;后续章节…

【C/C++ 11】贪吃蛇游戏

一、题目 贪吃蛇游戏机制是通过控制蛇上下左右移动并吃到食物得分。 蛇头碰到墙壁或者碰到蛇身就游戏结束。 食物随机生成&#xff0c;蛇吃到食物之后蛇身变长&#xff0c;蛇速加快。 二、算法 1. 初始化游戏地图并打印&#xff0c;地图的边缘是墙&#xff0c;地图的每个坐…

19.HarmonyOS App(JAVA)依赖布局DependentLayout使用方法

layout/ability_main.xml 显示位置不对&#xff1a;检查布局文件ohos:lef_of "id:tuzi",比如显示在兔子的左侧&#xff0c;这里就会显示不对。 需要id前没有$符号。改为&#xff1a; ohos:lef_of "$id:tuzi" <?xml version"1.0" encodi…

服务器学习

云服务器通常是通过多台物理服务器协同工作来提供的。云服务提供商使用大规模的数据中心&#xff0c;这些数据中心包含许多物理服务器。这些物理服务器上运行着虚拟化技术&#xff0c;允许它们被分割成多个虚拟服务器实例。 当用户请求创建一个云服务器时&#xff0c;云服务提…

FreeCAD的python脚本编写

简介 FreeCAD是一款强大的开源CAD软件&#xff0c;可以与python无缝对解&#xff0c;使用python来驱动三维几何的构建&#xff0c;具有很高的灵活性。本文主要讨论一下录制宏的方法&#xff0c;以及如何驱动特定参数 方法 打开FreeCAD软件&#xff0c;点击录制宏按钮后&…

C++实现鼠标点击和获取鼠标位置(编译环境visual studio 2022)

1环境说明 2获取鼠标位置的接口 void GetMouseCurPoint() {POINT mypoint;for (int i 0; i < 100; i){GetCursorPos(&mypoint);//获取鼠标当前所在位置printf("% ld, % ld \n", mypoint.x, mypoint.y);Sleep(1000);} } 3操作鼠标左键和右键的接口 void Mo…

什么是功能安全?

前言 在上一家公司的时候&#xff0c;有幸参加过公司内部的技术分享会&#xff0c;有一个同事跟我们分享了功能安全的一些内容。在提问环节&#xff0c;我问了一个问题“什么是功能安全&#xff1f;”他回答不上来。这也是我们很多人在工作中常犯的一个问题&#xff1a;我们做了…