1

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

Ruby 中的 GObject 子类化

但是,当我尝试以下操作时:

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

4

1 回答 1

0

我怀疑 get_size 将widthand委托height给对象属性,并且父小部件直接使用属性而不是点击您的get_size方法。get_size不是信号,这就是为什么signal_do_get_size也不会被调用的原因。

尝试:

set_property("width", 100)
于 2010-01-13T12:14:55.113 回答