【问题标题】:GObject Subclassing in Ruby for custom CellRenderer in GtkTreeViewRuby 中的 GObject 子类化,用于 GtkTreeView 中的自定义 CellRenderer
【发布时间】:2011-01-04 14:33:04
【问题描述】:

我正在尝试在 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

【问题讨论】:

    标签: ruby gtk gobject gtktreeview cellrenderer


    【解决方案1】:

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

    试试:

    set_property("width", 100)
    

    【讨论】:

    • 我对上面的问题做了一些澄清,我实际上是想覆盖我的子类中的get_size方法。
    • 我得到了你想要做的,我的观点是正确的。我认为 get_signal 没有被调用,你的实现和任何父类中的实现都没有。因此,我建议设置宽度和高度属性。
    猜你喜欢
    • 2021-10-23
    • 2012-06-10
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2019-11-05
    • 2013-11-23
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多