【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

 

 

 

 

 

相关推荐

  1. eclipse部分常用快捷键使用

    2024-02-01 08:12:04       35 阅读
  2. 使用vllm部署自己大模型

    2024-02-01 08:12:04       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 08:12:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 08:12:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 08:12:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 08:12:04       20 阅读

热门阅读

  1. C++ 结构体的构造函数

    2024-02-01 08:12:04       33 阅读
  2. 面阵相机拍摄运动的物体怎样保证图像清晰

    2024-02-01 08:12:04       41 阅读
  3. TensorFlow2实战-系列教程14:Resnet实战2

    2024-02-01 08:12:04       44 阅读
  4. 3D Gaussian Splatting-实时辐射场渲染技术

    2024-02-01 08:12:04       34 阅读
  5. TensorFlow2实战-系列教程15:Resnet实战3

    2024-02-01 08:12:04       39 阅读
  6. CSS 中的 :is(), :where(), 和 :has() 选择器简介

    2024-02-01 08:12:04       33 阅读
  7. 使用certbot申请https通配符证书【阿里云篇】

    2024-02-01 08:12:04       38 阅读
  8. K8S网络

    K8S网络

    2024-02-01 08:12:04      33 阅读
  9. k8s学习-数据管理

    2024-02-01 08:12:04       29 阅读
  10. brpc之单例

    2024-02-01 08:12:04       33 阅读
  11. Qt之connect函数使用

    2024-02-01 08:12:04       30 阅读
  12. 原型和继承

    2024-02-01 08:12:04       33 阅读
  13. electron从入门到打包exe

    2024-02-01 08:12:04       44 阅读