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 をサブクラス化し、メソッドを上書きすることです。この例では、TreeView によって呼び出される get_size です。ただ、CellRendererTextはRubyクラスではなくCモジュールなので、実際にシステムに認識させないとメソッドを上書きできないと思います。

また、CellRenderers を TreeViewColumn に割り当てる必要があります。これにより、get_size およびその他のメソッドが呼び出されます。

私の知る限り、同様の問題が PyGtk に存在し、GenericCellRendererクラスを追加することで何らかの形で回避されました。

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

4

1 に答える 1

0

get_sizeはとをオブジェクトプロパティに委任し、親ウィジェットはメソッドにアクセスする代わりにプロパティを直接使用しているwidthと思われます。シグナルではないので、どちらも呼び出されません。heightget_sizeget_sizesignal_do_get_size

試す:

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