如何在GtkTreeview中用字符串和pixbuf制作一列?

2023-12-24

我正在使用 Gtk+2 的应用程序中工作,我需要实现一个文件树视图。

实际的代码是:

public FileTree() {

    store = new TreeStore(2,typeof(string),typeof(string));

    this.change_dir( "/dir/path" );

    set_model( store );

    // File icon
    var pixbuf = new Gtk.CellRendererPixbuf();
    var column = new Gtk.TreeViewColumn();
    column.set_title("");
    column.pack_start(pixbuf, false);
    column.add_attribute(pixbuf,"stock-id",0);
    column.set_alignment(1.0f);
    append_column (column);

    // File name
    Gtk.CellRenderer cell = new Gtk.CellRendererText();
    insert_column_with_attributes(-1,"", cell, "text", 1);

    // Do some visual configs
    this.config();

}

and change_dir():

public void change_dir( string path ) {
        File repo_dir = File.new_for_path( path );

        try {
            generate_list( repo_dir, null, new Cancellable());
        } catch ( Error e ) {
            stderr.printf("Error: %s\n", e.message);
        }
    }

public void generate_list ( 
        File file, 
        TreeIter? parent = null, 
        Cancellable? cancellable = null 
    ) throws Error {

        // Enumerator
        FileEnumerator enumerator = file.enumerate_children (
            "standard::*",
            FileQueryInfoFlags.NOFOLLOW_SYMLINKS,
            cancellable
        );
        FileInfo info = null;
        TreeIter iter;

        while(cancellable.is_cancelled() == false && ((info = enumerator.next_file(cancellable)) != null )) 
        {
            // Check if not it's in the omited files.
            if( ! (info.get_name() in IGNORED ) ) {

                // Check if is a dir or a file
                if( info.get_file_type() == FileType.DIRECTORY ) {

                    this.store.append( out iter, parent);
                    this.store.set(iter, 0, STOCK_DIRECTORY, 1, info.get_name());

                    File subdir = file.resolve_relative_path(info.get_name());

                    this.generate_list(subdir, iter, cancellable );
                } else {
                    // It's a file

                    this.store.append( out iter, parent);
                    this.store.set(iter, 0, STOCK_FILE, 1, info.get_name());
                }

            }
        }

        if ( cancellable.is_cancelled()) {
            throw new IOError.CANCELLED ("Operation was cancelled");
        }
    }

它显示两列(第一列是文件夹/文件图标,第二列是文件夹/文件的名称)

有某种方法可以在一列中做到这一点吗?

编辑:将图标设置在名称旁边可能是一些黑客行为,实际代码显示图标和字符串,但是当我展开列时,字符串向右移动一点,并且图标之间有一个空格和字符串。


使用TreeViewColumn的方法,pack_start(),我只需将任何单元格渲染器附加到列中。

(在C中这就像常见问题:GTK+ 3 参考手册 https://developer-old.gnome.org/gtk3/unstable/gtk-question-index.html#id-1.2.5.3.3.5.3(见5.2))

所以,刚刚修改:

// File icon
var pixbuf = new Gtk.CellRendererPixbuf();
var column = new Gtk.TreeViewColumn();
column.set_title("");
column.pack_start(pixbuf, false);
column.add_attribute(pixbuf,"stock-id",0);
column.set_alignment(1.0f);
append_column (column);

// File name
Gtk.CellRenderer cell = new Gtk.CellRendererText();
insert_column_with_attributes(-1,"", cell, "text", 1);

with:

// File icon
    
var pixbuf = new Gtk.CellRendererPixbuf();
column.set_title("");
column.pack_start(pixbuf, false);
column.add_attribute(pixbuf,"stock-id",0);

// The name of the file.
var cell = new Gtk.CellRendererText();
column.pack_start(cell, false);
column.add_attribute(cell,"text",1);

append_column (column);

就在那里:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在GtkTreeview中用字符串和pixbuf制作一列? 的相关文章

  • 如何使用 GTK+ / Cairo 旋转图像

    我有一个简单的应用程序 应该使用每 x 毫秒旋转装饰轮这么多度GTK and Cairo 我下面有一些代码可以调用cairo rotate 来自计时器 然而 图像并没有改变 我是否必须使图像无效才能引发暴露事件 我对开罗很陌生 一个简单的例
  • 使用 PRAW 在 Python 中从 Reddit API 解码 JSON

    我在 Python GTK 应用程序中使用 PRAW for Reddit API 我已经成功地使用了 API 但我似乎无法解码 JSON 以供使用 应该知道 我是Python和GTK应用程序的初学者 Mode Python coding
  • PyGObject GTK+ 3 - 文档?

    PyGObject 似乎没有真正的文档 本教程 http python gtk 3 tutorial readthedocs org en latest index html已经很接近了 我整个早上都在努力寻找对被接受的论点的描述Gtk W
  • GTK+ 中的 CSS 样式

    好的 我最近开始使用 GTK 用 C 语言进行编程 我的代码中有一个 GdkToggleButton 我想用 css 添加样式 我在这里阅读了几乎所有 GTK3 文档https developer gnome org gtk3 stable
  • 如何检查 GTK+3.0 中小部件的类型?

    I saw this https stackoverflow com questions 60112777 find type of gtk widgets帖子 但它是针对 Python 的 所以这对我没有太大帮助 我正在使用 C 进行编程
  • GTK+ g_pointer_connect 传递数据不正确

    使用 g signal connect 时 我在将数据传递给函数时遇到问题 guint x 777 gpointer ptr x g print std to string guint p c str g signal connect G
  • 通过 pip 安装 PyGObject 时缺少文件 msvc_recommended_pragmas.h

    我尝试通过 pip 安装 PyGObject 但失败并出现给定错误 Building wheels for collected packages pygobject Building wheel for pygobject PEP 517
  • Gtk-CRITICAL **:IA__gtk_widget_style_get:断言“GTK_IS_WIDGET(小部件)”失败

    在静态构建我的 qt 应用程序之后 configure static debug and release confirm license nomake demos nomake examples nomake tools 它工作正常 但我收
  • 菜单栏隐藏时加速器停止响应

    我有一个基于空地的 gtk3 用户界面 并且我为几个菜单项设置了加速器字段 我不确定 GtkBuilder 在加载林间空地文件时到底在幕后做了什么 使用全局 GtkAccelGroup 但最终结果是 当我隐藏菜单栏时 加速器快捷键停止工作
  • GtKGLArea 无法创建 OpenGL 2.1 上下文

    我目前正在为我的游戏引擎项目开发一个简单的编辑器 虽然该项目似乎在我的主工作站 支持 OpenGL 3 3 的 GTX 650Ti 上运行得很好 但当我在我的设备上测试它时 它似乎被破坏了 测试桌面 GMA4500 最大支持 OpenGL
  • C# Mono Linux - 抓取全局剪贴板的内容

    我试图简单地从剪贴板 抓取 文本并将其放入变量中 我在做这件事时遇到了很多麻烦 我尝试过使用 Gtk Clipboard Get Gdk Atom Intern PRIMARY true 到目前为止 我的代码只是将 Gtk Clipboar
  • PyGObject 中的 TreeView 拖放:未调用拖拽数据删除?

    我正在研究如何在 PyGObject 的 TreeView 中进行拖放的示例 我有一些不明白的事情 为什么是drag data delete函数从未被调用 这是独立的示例 from gi repository import Gtk Gdk
  • 如何从 Python 将一项添加到 GTK 的“最近使用”文件列表中?

    我正在尝试从 Ubuntu 上的 Python 3 添加到 最近使用的 文件列表 我能够成功read最近使用的文件列表如下 from gi repository import Gtk recent mgr Gtk RecentManager
  • 如何使用 GStreamer 和 XOverlay 在 GTK+ 应用程序窗口中嵌入视频?

    我正在尝试使用 GTK 和 GStreamer 编写一个小型媒体播放器 目前使用 XOverlay 接口将视频嵌入到 GtkDrawing 区域中INSIDE主窗口 该程序是使用以下命令编译的 g home phongcao cacao c
  • 如何使用GTK开发类似Eclipse的界面?

    我想使用 GTKMM 编写一个桌面应用程序 我希望界面由不同的面板组成 就像在 Eclipse 中一样 您有项目资源管理器 控制台 属性等 您应该能够拖动面板来更改其位置 关闭它们并弹出它们 不确定是否可以弹出 Eclipse 中的面板 但
  • 在Gtk中,是否可以使小部件淡入淡出?

    我想要一个Label 或者至少是标签上的文字 进行快速淡入 看起来这是可能在混乱中 http blog didrocks fr index php post Design experience and demos in GTK Clutte
  • 如何更改 GTK 中的字体大小?

    有没有一种简单的方法可以更改 GTK 中文本元素的字体大小 现在我能做的就是set markup在标签上 写着一些愚蠢的东西 比如 lbl set markup span s span text 这 1 需要我设置字体 2 似乎有很多开销
  • 使用 GTK 构建 GUI#

    我可能需要使用 C 和 Mono 构建 GTK GUI 如果我理解正确的话 这意味着我有3个选择 编写 C 代码来调用 GTK 包装器类 GUI 是 在代码中 使用 MonoDevelop GUI 设计器 这使用 stetic 标记构建了一
  • 如何在vala中使用gettext?

    当我尝试在 vala 中使用 gettext 时 我没有收到来自 vala 的错误或警告 但我从 c 编译器收到以下错误 usr include glib 2 0 glib gi18n lib h 29 2 error error You
  • Python GTK 信号处理程序不工作

    我正在使用 GTK 为 GUI 编写一个 Python 应用程序 我注意到从终端使用 Ctrl C 关闭它不起作用 我发现这是因为一个错误 所以我尝试手动处理该信号 问题是 如果我将默认行为设置为默认行为 则会捕获信号并正确关闭应用程序 但

随机推荐

  • 使用 HOGDescriptor 的问题

    我正在摆弄一些c opencv 我正在查看一些样本 但还没有 设法编译 运行 peopleDetect cpp 它使用HOGDescriptor 我已经设置了一个基本的 Qt 控制台应用程序来测试和缩小问题范围 并得到了这个基本代码 inc
  • 类 static constexpr 的 C++ 链接器错误

    我正在编译以下简单程序g 4 6 1 std c 0x include
  • 在 ControlParameter 中找不到控件 ID

    我试图从文本框中插入值 但收到错误消息 无法在控制参数中找到 controlid TextBox 位于表单视图内 而表单视图位于列表视图内 SqlDataSource 位于 ListView 之外 我的 InsertButton Click
  • 使用 scipy 和 sympy 进行 Python 集成

    我想要一个自定义的 python 函数 采用数学表达式f x 积分的界限x1 x2和所需的耐受性tol Uses sympy integrate y x 检查它是否有解析 符号解 如果有则使用返回结果sympy integrate y x
  • 如何使用 Flutter 在 android studio 中进行代码折叠区域块

    我可以像这样在 android studio 中做区域块 region Description Your code here endregion 但如何与 flutter 一样呢 在 IntelliJ 或 Android Studio ID
  • 注入到 Vue.js 中的

    我有一些外部脚本需要加载到各个页面上 例如 Google Places Autocomplete Facebook API 等 显然 在每条路线上加载它们是没有意义的 但是文档没有解决这种相当常见的情况 此外 Vue 实例安装到主体内的标签
  • 导入多个 AngularJS 模块的工厂

    我想知道是否有一种方法可以将我在 AngularJS 模块中定义的所有工厂导入到控制器中 而不必将它们全部列出 假设我有一个名为foo js包含 angular module Foo factory Bar1 function factor
  • 如何将字符串转换为数组的名称?

    我有大量包含不同数据的数组 每个都有一个看起来像这样的名字 rsf wings isa wings isa ships isa civs etc 我有一个函数可以构建一个String arrayName从传递给它的各种组件中 public
  • (嵌入并)通过 D3 和/或 javascript 引用外部 SVG

    我有一个 svg 文件 想将其嵌入到我的 d3 图形的 svg 结构中 我还需要通过某些 g 元素的 id 引用附加到 g 元素的所有路径 多边形 我尝试了不同的方法来嵌入和引用 svg g s 但由于某些原因它不起作用 1 第一次尝试 F
  • Git 提交是快照,而不是差异。那么为什么需要 rebase 来删除旧的提交呢?

    我的理解是 无论出于何种意图和目的 Git 提交是快照 而不是差异 https github blog 2020 12 17 commits are snapshots not diffs 因此 尽管 Git 会在内部 增量压缩 快照以消除
  • 如何使涉及 future 尾递归的函数?

    在我的 Scala 应用程序中 我有一个函数调用一个返回 Future T 类型结果的函数 我需要在递归函数调用中传递映射结果 我希望这是尾递归的 但是地图 或 flatMap 破坏了这样做的能力 我收到错误 递归调用不在尾部位置 下面是此
  • android:生成不重复的随机数

    有人能帮我制作一种在 Android 中生成不重复的随机数的方法吗 最大数量为 prjcts size 这是我的 JSON 数组 并且返回值应该是整数 我已经拥有的是 int i int prjcts size Math random 我将
  • 限制node.js的内存使用

    我正在尝试限制node js应用程序使用大量内存 我发现 max stack size max executable sizeV8 中可在调用文件时传递的选项 但我应该如何结合这些和可能的其他参数来将最大内存使用量限制为 1GB https
  • 如何控制 XNA 在启动时定位游戏窗口的位置?

    我有以下烦恼 每当我开始调试 XNA 游戏时 游戏窗口就会在屏幕中央弹出 由于我有一个双显示器系统 我想在我的第二个显示器上设置默认启动位置 但是 这应该只发生在调试模式中 您需要添加对System Windows Forms and Sy
  • Node.js Cheerio 解析器破坏了 UTF-8 编码

    我用 Cheerio 解析我的请求 如下所示 var url http shop nag ru catalog 16939 IP videonablyudenie OMNY 16944 IP kamery OMNY c vario obek
  • NoneType'对象没有属性'find_all'出现错误

    我当时是网scraping使用 Beautiful Soup 的 Wikipedia 表 这是我的代码 Code URL https en wikipedia org wiki List of most viewed YouTube vid
  • 如何使用 Amazon S3 配置 django-compressor 和 django-staticfiles?

    我正在尝试设置Django 压缩器 https github com jezdez django compressor and django 静态文件 https docs djangoproject com en dev howto st
  • RoomDatabase_Impl 不存在

    当我尝试实现房间数据库时 出现以下错误 java lang RuntimeException cannot find implementation for com udacity gradle builditbigger Database
  • 如何优化给定的 db2 查询,

    考虑如下我的 DB2 查询 Select something from some tables select something from some tables where bhla bhla Unionall select someth
  • 如何在GtkTreeview中用字符串和pixbuf制作一列?

    我正在使用 Gtk 2 的应用程序中工作 我需要实现一个文件树视图 实际的代码是 public FileTree store new TreeStore 2 typeof string typeof string this change d