[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gtk-app-devel
Subject:    Re: [PyGObject] TreeView: Empty integer field or right aligned string
From:       Luca Bacci <luca.bacci982 () gmail ! com>
Date:       2018-05-09 17:37:52
Message-ID: CAJSEPt2ZjHGpLKLdariu24GOube2YCtVZy+oBH-gw=36ayzznw () mail ! gmail ! com
[Download RAW message or body]

in python you can do

def cell_data_func(self, tree_column, cell, tree_model, iter, data):
    if tree_column is self.col_a:
        # code
    else if tree_column is self.col_b:
        # code

see How do I check if two variables reference the same object in Python?
<https://stackoverflow.com/questions/3647546/how-do-i-check-if-two-variables-reference-the-same-object-in-python>
 you have make col_a and col_b class members


But I think it's better to just write two functions:

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Pango

class TreeView(Gtk.TreeView):
    def __init__(self, model):
        Gtk.TreeView.__init__(self, model)

        cell_a = Gtk.CellRendererText()
        col_a = Gtk.TreeViewColumn('int',
                                   cell_a)
        col_a.set_cell_data_func(cell_a, self.func_a, None)
        self.append_column(col_a)

        cell_b = Gtk.CellRendererText()
        col_b = Gtk.TreeViewColumn('str',
                                   cell_b)
        col_b.set_cell_data_func(cell_b, self.func_b, None)
        self.append_column(col_b)

    def func_a(self, tree_column, cell, tree_model, tree_iter, data):
        cur_value = tree_model[tree_iter][0]
        if cur_value == 0:
            cell.set_property('text', '')
        else:
            cell.set_property('text', str(cur_value))

    def func_b(self, tree_column, cell, tree_model, tree_iter, data):
        cell.set_property('text', tree_model[tree_iter][1])

class TreeModel(Gtk.ListStore):
    def __init__(self):
        Gtk.ListStore.__init__(self, int, str)

        # int and string
        self.append([1, '111'])

        # first column "empty" but displayed as "0"
        # second column "empty" (but a workaround)
        self.append([0, 'Hi!'])

        # RIGHT alignment (second column) not working
        self.append([3, '3'])


class Window(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title='Mein Gtk-Fenster')
        self.set_default_size(400, 300)

        self.model = TreeModel()
        self.view = TreeView(self.model)

        # layout
        self.layout = Gtk.Grid()
        self.add(self.layout)
        self.layout.attach(self.view, 0, 1, 1, 1)

        self.connect('destroy', Gtk.main_quit)
        self.show_all()

if __name__ == '__main__':
    win = Window()
    Gtk.main()



2018-05-08 22:09 GMT+02:00 <c.buhtz@posteo.jp>:

> On 2018-05-08 14:20 Luca Bacci <luca.bacci982@gmail.com> wrote:
> > - Use Cell Data Func for ultimate flexibility
> 
> That is the signature
> Gtk.TreeCellDataFunc(tree_column, cell, tree_model, iter, data)
> 
> But how do I know which cell (row and column) is affected?
> I can extrat the row with tree_model[iter] but not the column.
> 
> "tree_column" is of type Gtk.TreeViewColumn but doesn't even know its
> position (first, second, ... column). There is no integer indicating
> that.
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
> 
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic