0

を拡張するクラスにいくつかのコードがgtk.TreeViewあり、これがinitメソッドです。3 列のツリー ビューを作成したいと考えています。トグル ボタン、ラベル、およびユーザーが入力できるドロップダウン ボックス。以下のコードは機能しますが、トグル ボタンがマウス クリックに反応せず、ラベルと ComboEntry が描画されない点が異なります。(だから、うまくいかないと言えると思います)。ただし、行を問題なく追加できます。

    #make storage                   enable/disable  label    user entry
    self.tv_store = gtk.TreeStore(gtk.ToggleButton, str, gtk.ComboBoxEntry)
    #make widget
    gtk.TreeView.__init__(self, self.tv_store)
    #make renderers
    self.buttonRenderer = gtk.CellRendererToggle()
    self.labelRenderer = gtk.CellRendererText()
    self.entryRenderer = gtk.CellRendererCombo()
    #make columns

    self.columnButton = gtk.TreeViewColumn('Enabled')
    self.columnButton.pack_start(self.buttonRenderer, False)
    self.columnLabel = gtk.TreeViewColumn('Label')
    self.columnLabel.pack_start(self.labelRenderer, False)
    self.columnEntry = gtk.TreeViewColumn('Data')
    self.columnEntry.pack_start(self.entryRenderer, True)

    self.append_column(self.columnButton)
    self.append_column(self.columnLabel)
    self.append_column(self.columnEntry)

    self.tmpButton = gtk.ToggleButton('example')
    self.tmpCombo = gtk.ComboBoxEntry(None)
    self.tv_store.insert(None, 0, [self.tmpButton, 'example label', self.tmpCombo])
4

2 に答える 2

2

まず、現在行っている方法ではなく、 boolstrおよびstr列を使用してモデルを作成する必要があります。次に、次のように、適切なモデル列からレンダラーのプロパティをバインドする必要があります。

self.columnButton = \
    gtk.TreeViewColumn ('Enabled', self.buttonRenderer, 
                        active = 0)  # 0 is the tree store column index

editable次に、レンダラーのプロパティをに設定する必要がありますTrue。最後に、シグナル (レンダラーの種類によってはchangedまたは) を自分で処理し、それに応じてストアを更新する必要があります。editing-done

Py-gtktreeなどの一部のヘルパーを使用する方が簡単な場合が あります。ツリーを編集する例もあります。

于 2010-05-08T15:27:32.047 に答える
1

gtk.CellRendererToggle で信号を接続するだけtoggledで、クリックするとその信号が発信され、コールバックでモデルの値が変更されます。

ej。

def toggle(self, cellrenderer, path):
        Self.model[path][column] = not self.model[path][column]

self.modelツリービューに関連付けられたモデルです。

于 2010-05-11T14:35:11.860 に答える