问题标签 [gtktreeview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
295 浏览

python - 如何将 gtk.ListStore 项目与我自己的模型相关联

我有一个项目对象列表,我显示在GtkTreeView. 当用户双击 TreeView 中项目的行时,我试图打开一个包含项目详细信息的对话框。

现在,我从 TreeView(这是项目的名称)通过 获取选定的值get_selection(),并在我自己的列表中按名称搜索该项目,以将选择与我自己的模型相关联。

但是,这感觉不太对(另外,它假定项目的名称是唯一的),我想知道是否有更优雅的方式来做这件事。

0 投票
3 回答
713 浏览

python - 对模型进行过滤和排序的 GtkTreeView 的拖放支持

正如标题所示,我有一个对其gtk.TreeView模型进行排序和过滤的模型。根据文档:“拖放行的重新排序仅适用于未排序的商店。”。给出的唯一其他信息与使用外部资源有关,在这种情况下我不需要。

无论如何,我尝试实现它,为接收到的拖放信号和拖放信号提供处理程序,但仍然出现以下错误:

GtkWarning:当使用不支持 GtkTreeDragDest 接口并启用拖放的模型时,您必须覆盖 GtkTreeView 上的默认 'drag_data_received' 处理程序。最简单的方法是连接到“drag_data_received”并在信号处理程序中调用 g_signal_stop_emission_by_name() 以防止默认处理程序运行。查看 gtktreeview.c 中默认处理程序的源代码,了解您的处理程序应该做什么。(gtktreeview.c 位于 GTK 源代码中。)如果您从 C 以外的语言使用 GTK,则可能有一种更自然的方式来覆盖默认处理程序,例如通过派生。

尽管如此,虽然我还没有实现它,但看起来我可以让它工作,因为它不会崩溃。尽管如此,这是一个我宁愿没有的警告。

那么,是否有 python 等价物g_signal_stop_emission_by_name,或者我是否以错误的方式处理这个问题?

0 投票
5 回答
3851 浏览

python - 使用 python 在 GtkTreeview 中更改所选项目的颜色

我有一个包含 pygtk.treeview 的对话框,用于按优先级列出任务。每行都有基于该优先级设置的背景颜色,例如,最高优先级具有浅红色背景。

行选择颜色不是那么容易改变的。我可以使用 来设置它treeview.modify_base(gtk.STATE_SELECTED, "#C4C4C4"),但没有颜色与用于增强优先级概念的颜色搭配得很好。

我的想法是将选择颜色更改为用作普通行背景的颜色的稍暗版本,因此在上面的示例中,这将是更深的红色。我尝试调用上面的函数来响应treeselection的changed信号,它可以工作,但是闪烁很严重。

另一个想法是将选择更改为透明并在其周围放置边框,但据我所知,这是不可能的。

  1. 如何以上述方式更改选择颜色而不会闪烁?
  2. 我可以通过在行周围只有一个边框来更改显示选择吗?

注意:我知道这违反了用户选择的主题。我觉得我有一个很好的理由。用颜色表示优先级可以立即识别。选择颜色隐藏了这一点。如果您有其他建议,我愿意接受,但它需要保持用户可以轻松识别优先级。

0 投票
1 回答
638 浏览

python - PyGTK TreeColumns 所有精确重复

我写了一个简单的 PyGTK 脚本来在 TreeView 中显示一些基本的进程信息:

我的问题是所有列的值都相同。

笔记:

  1. 显然这与第一列相关(即,如果我更改第一列的数据,那么这就是所有其他数据的结果)

(将在发布建议时添加更多内容)

0 投票
1 回答
2871 浏览

gtk - 由于排序,GtkTreeView 插入/更新性能损失

在将多行插入 GTK 树视图(使用 PyGTK)或修改多行时,我遇到了性能问题。问题是模型似乎在每次更改(插入/修改)后都会重新使用。这会导致 GUI 挂起几秒钟。通过注释掉模型不排序可以model.set_sort_column_id(SOME_ROW_INDEX, gtk.SORT_ASCENDING)消除这些问题。

因此,我想在插入或修改模型时禁用排序,然后重新启用它。不幸的是,排序不能用model.set_sort_column_id(-1, gtk.SORT_ASCENDING). 使用冻结/解冻功能也不起作用:

那么,如何禁用排序?还是有更好的批量插入/修改方法?


解决方案

感谢他在回答中提供的信息和链接 bobince,我检查了一些替代方案:

1) 虚拟排序

这使时间从大约 11 秒减少到 2 秒。哇!但可能会更好,这仅适用于 1000 行。

2) 更新时删除模型

没有明显差异,11 秒。

3) PyGTK FAQ中的虚拟排序和酷生成器技巧

结果:与解决方案 1) 中估计的 2 秒相同,但 GUI 在此期间做出反应。我更喜欢这种方法。如果需要,可以调整模 200 以使 GUI 或多或少具有反应性。

也许甚至可以进行子类化gtk.TreeStore以获得更好的结果?还没有尝试过,但选项 3) 现在已经足够好了。

0 投票
1 回答
5806 浏览

python - PyGtk - TreeView 和选定的行

我有一个 TreeView,当我点击它时,我收到错误:

它只发生在第一次点击。之后它工作正常。我不知道怎么了。这是代码:

0 投票
3 回答
2653 浏览

c# - 如何设置过滤底层 TreeStore 的 Gtk# TreeModelFilter?

我已阅读“GtkSharp TreeView 教程”,其中作者描述了如何为基础 ListStore 设置和使用 TreeModelFilter(在教程部分“过滤数据”下)。该技术似乎不适用于底层分层 TreeStore。我想过滤多级 TreeStore 并在 TreeView 中显示结果。它给了我一个真正的困难。是否有任何教程、示例或建议?

以下是代码。它与教程的代码基本相同,除了处理 TreeStore 而不是 ListStore 的构造和填充的更改。{TreeStore 用于保存联系人的“姓名”和“电子邮件地址”,分为(并另存为)根“朋友”和“亲戚”的孩子}

[我在 windows vista 上使用 mono 2.6.4 /monodevelop 2.4 / gtk-sharp 2.12。]

0 投票
2 回答
829 浏览

python - 每行具有不同组合模型的 GtkTreeviewColumn

我有一组全局值,例如["Foo", "Bar", "Baz", "Quux"]. my 中的每一行TreeView代表一个只能处理这些值的子集的实体。例如,第一行可能处理"Foo"and "Bar",第二行可能处理"Bar"and "Quux"。我想要一ComboBox列允许每一行选择它可以处理的值之一。

但是,从我现在的代码来看,整个专栏只能有一个模型ComboBox

我只有一次机会为整个专栏设置模型。有没有办法为每一行设置不同的商店,或者以某种方式过滤值?

0 投票
1 回答
841 浏览

python - _really_ 禁用 GtkTreeView 搜索

如何真正禁用 gtk treeview 交互式搜索?文档说,set_enable_search(False)但如果我这样做,CTRL+F仍然会导致出现烦人的搜索弹出窗口。连接start-interactive-search和返回True也不起作用。

0 投票
2 回答
1684 浏览

python - 这可以绘制像 GtkIconView 一样列出的 GtkTreeView 吗?

我正在开发一个用 python 编写的 GTK+ 应用程序。我显然使用 PyGtk。我的申请是关于视频集的。这是一种 F-spot 或 Picasa,但用于视频。

正如您在这两个应用程序中看到的那样,您有一个中心区域,您可以在其中查看所有带有标签缩略图的照片。

在我的应用程序中,我想实现相同的视图。现在我只是使用这个:

Agtk.Table包含 a VBox,在VBoxa Pixbuf(我的视频缩略图)和 aHBox内,以及在 内,与标签HBox一样多。Pixbuf

它正在工作,但它很丑陋,而且它似乎不是更好的解决方案。

深入查看文档,我发现了两个我需要的小部件:IconViewTreeView. 但是IconView每个“行”只能显示一个 pixbuf,并且 TreeView 不会显示为像IconView.

我的问题:有没有办法像 IconView 一样显示 TreeView(在网格中)?您将如何实现在下方排列照片和标签的 F-spot 方式?