gtk.cellrendererのrender()関数内のgtk.treeiterアクセス - pygtk
-
26-10-2019 - |
質問
次のコードをコーディングしようとしています:2つの列。 1つにはitemidが含まれ、もう1つにはTypeIDが含まれています。 TypeIDが特定の値に等しい場合にのみ、ItemIDをレンダリングしたいと思います。
class IDRenderer(gtk.CellRendererText):
def __init__(self):
gtk.CellRendererText.__init__(self)
def do_render(self,window, widget, background_area, cell_area, expose_area, flags):
if ----} Condition to ask for value of the typeId - Cell {-----:
gtk.CellRendererText.do_render(self, window, widget, background_area, cell_area,
expose_area, flags)
gobject.type_register(IDRenderer)
TypeIDの値を判断するために必要な現在レンダリングされた行のiterを取得する方法がわかりません。これも可能ですか?
解決
Gimpircの#pygtkのナイスガイのおかげで、私は今知りました:
この例で行われているように、いわゆるセルデータ機能を対応するgtk.treeviewcolumnにバインディングすることで、あなたはそれを行うことができます
def renderId(celllayout, cell, model, iter):
if model.get_value(iter,1) == 3:
cell.set_property('visible',True)
else:
cell.set_property('visible',False)
treeviewcolumn = gtk.TreeViewColumn()
renderer = gtk.CellRendererText()
treeviewcolumn.add_attribute(renderer,'text',0)
treeviewcolumn.set_cell_data_func(renderer,renderId)
完全なツリービューをレンダリングするために関連するコードをいくつか紹介しましたが、それは私がやりたいこととそれをどのように行うかを示していると思います。
列は、2番目のモデルコラム(1)の値が3に等しい場合にのみ、モデルの最初の列(0)の値をレンダリングします
これが誰かを助けてくれることを願っています。
他のヒント
私が知る限りそれは不可能です。レンダリング関数を呼び出すコードによって自動的に設定されるカスタムレンダラーのプロパティを使用する必要があります。 (以下のような text
の財産 CellRendererText
- レンダリングコードはツリーモデルからテキストを取得しませんが、ツリーモデルは text
レンダリングコードを呼び出す前のレンダラーのプロパティ。)
所属していません StackOverflow