2010-01-13 46 views
1

我想實現的Ruby/GTK定製的CellRenderer,我已經發現了這個建議定義CellRenderer:GObject的子類中的Ruby在GtkTreeView

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

回答

0

我懷疑get_size代表的widthheight對象屬性,並父窗口小部件直接使用這些屬性,而不是直接使用get_size方法。 get_size不是一個信號,這就是爲什麼signal_do_get_size也不會被調用。

嘗試:

set_property("width", 100) 
+0

我加了一些澄清上述問題,其實我是想覆蓋get_size方法在我的子類。 – genericus666

+0

我得到了你想要做的,我的觀點站立。 我認爲get_signal沒有被調用,既不是你的實現也不是在任何父類中的實現。 因此,我建議設置寬度和高度屬性。 – Tobu