我以树店为模型进行了树视图.窗口按预期显示,但当我单击"+"展开项目时,我收到以下消息:
GLib-CRITICAL **: Source ID 221 was not found when attempting to remove it
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
#include <gtk/gtk.h>
/* compile with: */
/* gcc main.c -o boxy `pkg-config --cflags --libs gtk+-2.0` */
typedef struct {
GtkWidget *toplevel;
GtkWidget *treeview;
} Widgets;
enum { ITEM_PARENT, ITEM_CHILD };
typedef struct {
gint tipo;
gint id;
gchar *nombre;
gint cantidad;
} Lista;
void addColumn (GtkTreeView *tv, const gchar* title, gint pos) {
GtkCellRenderer *tmp;
tmp = gtk_cell_renderer_text_new ();
g_object_set (tmp, "editable", TRUE, "editable-set", TRUE, …Run Code Online (Sandbox Code Playgroud) 我在a里面有一个treeview-widget ScrolledWindow,它在运行时填充.我希望ScrolledWindow自动滚动到列表的末尾.我"解决"问题,通过调整vadjustment的ScrolledWindow,每次一个行插入到树视图.例如:
if new_line_in_row:
adj = self.scrolled_window.get_vadjustment()
adj.set_value( adj.upper - adj.page_size )
Run Code Online (Sandbox Code Playgroud)
如果我在交互式ipython会话中运行代码并自己设置值,一切都按预期工作.
如果我使用默认的python解释器运行代码,则自动滚动不会一直有效.我调试了代码,问题似乎是,调整值有某种"滞后",只在一段时间后才会改变.
我的问题是:如何可靠地滚动到最大位置ScrolledWindow?是一个特殊的信号生成,我可以使用?还是有更好的方法来设置adjustment-value?
我有99%的44/100的一切工作.我有一个林间空地文件,我使用gtkbuilder来渲染它,然后它出现了.除了我的treeview liststore中的数据之外的所有内容.我注意到默认情况下树视图不可见,并且将其设置为true会使一个框出现在树视图区域中,但是我无法在树视图中显示任何列表存储项.我在glade中定义的列表存储区中有一些默认数据,我也以编程方式添加了一些,但没有显示任何内容.是否有一些可见的开/关选项我不见了?
我正在学习PyGtk.我有一个简单的树视图,有一列,我从列表中获取该树视图的项目.
如何在树视图中获取所选项目的值?
我正在使用glade 3,创建TreeView并成功添加了行作为算法完成,但我有一个小问题,因为treeview将添加新行,因此我的"GUI"将变得更长到下面,我怎么能添加滚动条为这个TreeView?为了让我的"GUI"不再存在?
注意:我已添加"新调整"并将其连接到TreeView和ScrollBar垂直,但仍然无法完成工作.
任何的想法?
我正在尝试做键盘命令.当我插入S+ some_number+时,Return我需要调用一个函数,该函数将在列上看到此数字Gtk.Treeview并设置该行已选中.我怎样才能做到这一点?
如何gtk.Entry在gtk.TreeViewColumn标题/标题中使小部件可聚焦或可编辑?我试过这个:
# Create tree-view.
treeview = gtk.TreeView()
#...
# Create column.
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn(None, renderer, text=0)
# Set column header.
header = gtk.VBox()
title = gtk.Label("Column")
header.pack_start(title)
filter = gtk.Entry()
#...
header.pack_start(filter)
header.show_all()
column.set_widget(header)
# Add column
treeview.append_column(column)
Run Code Online (Sandbox Code Playgroud)
但是列标题中的Entry小部件不可编辑且不会聚焦.我已经尝试将'clickable'设置为True和False.我在Ubuntu 10.04上使用pygtk 2.21.0-0ubuntu1和libgtk 2.22.0-0ubuntu1.任何帮助将不胜感激.
编辑:
问题源于GtkTreeViewColumn标头的显示方式.标题小部件放在GtkAlignment其父级是GtkHBox其父级是GtkButton其父级最终的父级GtkTreeView.该GtkButton是拦截和阻止我GtkEntry被聚焦和接收鼠标输入.
我有一个问题与Gtk.Treeviewindide a Gtk.ScrolledWindow.我有大量的数据,不适合我的普通窗口几何,所以我把我的Treeview放在一个ScrolledWindow,这似乎是正常的方式.这个解决方案的问题是,当我滚动时,我的列标题消失了.这种行为对我来说似乎有点好,因为它ScrolledWindow应该关心它里面的小部件.
那么,如何让我的树视图是滚动和第一行中总是显示栏标题?
我修改了basictreeview.py示例来表示我的问题:
#!/usr/bin/env python
# example basictreeview.py
import pygtk
pygtk.require('2.0')
import gtk
class BasicTreeViewExample:
# close the window and quit
def delete_event(self, widget, event, data=None):
gtk.main_quit()
return False
def __init__(self):
# Create a new window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Basic TreeView Example")
self.window.set_size_request(200, 200)
self.window.connect("delete_event", self.delete_event)
# create a TreeStore with one string column to use as the model
self.liststore = gtk.ListStore(str)
# we'll add some data …Run Code Online (Sandbox Code Playgroud) 如何在 Python 中的 Gtk.TreeView 中获取当前选定行的索引?
我有一个列表L我的类A的对象.这个类实现__str__/ __repr__,所以每个对象都有自己的字符串表示(不一定是唯一的).我在pygtk中有一个GUI,我有一个只有一列的TreeView小部件.我想用L中的对象的字符串表示来填充它,但是我希望将所选项目作为对象而不是字符串.有没有办法让TreeView存储对象列表,但是将它们显示为stings?如果没有,那么知道TreeView中选择了哪些对象的最佳方法是什么?问题还在于,根据某些条件,我可以不使用整个L填充TreeView,而是使用它的一些子列表,因此TreeView中的项目索引将与L中的项目索引不对应.