GObject在Ruby中进行子类化,用于GtkTreeView中的自定义CellRenderer

时间:2010-01-13 11:44:21

标签: ruby gtk gobject gtktreeview cellrenderer

我正在尝试在Ruby / GTK中实现自定义的CellRenderer,我已经找到了这个建议:

GObject subclassing in Ruby

然而,当我尝试以下内容时:

class CellRendererCustom < Gtk::CellRendererText
  type_register #register within gobject system?
  def initialize
    super
  end
  def get_size(widget, cell_area)
    puts "Never called :-("
    return 0,0,100,100
  end
  def signal_do_get_size(widget, cell_area)
    puts "Never called :-("
    return 0,0,100,100
  end
  def signal_do_on_get_size(widget, cell_area)
    puts "Never called :-("
    return 0,0,100,100
  end
  def on_get_size(widget, cell_area)
    puts "Never called :-("
    return 0,0,100,100
  end
end

永远不会调用这些信号。我想这与Ruby与GObject API的连接方式有关,但老实说,我不知道这一切是如何运作的。

我想要做的是继承CellRendererText,并覆盖一个方法,在本例中为get_size,由TreeView调用。但是,我认为因为CellRendererText是一个C模块而不是ruby类,所以我不能覆盖它的方法而不会让系统意识到这一点。

我也需要将CellRenderers分配给TreeViewColumn,然后调用get_size和其他方法。

据我所知,PyGtk中存在类似的问题,它在某种程度上通过添加GenericCellRenderer类来规避:

http://faq.pygtk.org/index.py?req=show&file=faq13.045.htp

1 个答案:

答案 0 :(得分:0)

我怀疑get_size将widthheight委托给对象属性,而父窗口小部件直接使用属性而不是命中get_size方法。 get_size不是信号,这就是为什么signal_do_get_size也不会被调用的原因。

尝试:

set_property("width", 100)