Explicação
Por questões estéticas ou para facilidade de visualização, é conveniente criar um efeito zebra, principalmente se sua lista é uma lista grande. Para isso temos um sinal da classe GtkCellLayout que é atribuído pelo método set_cell_data_func(). Com ele podemos executar uma função sempre que um novo valor for atribuído à uma celula.
Imagem
Solução
Utilizamos o método set_cell_data_func() da classe GtkCellLayout.
Exemplo
widgets['trvTeste'] = new GtkTreeView($model);
// Cria a colunas
$render = new GtkCellRendererText();
$column = new GtkTreeViewColumn("Couna 1", $render, "text", 0);
$this->widgets['trvTeste']->append_column($column);
// Conecta a coluna ao sinal de renderização
$column->set_cell_data_func($render, array($this, "trvTeste_onRender"));
$render = new GtkCellRendererText();
$column = new GtkTreeViewColumn("Coluna 2", $render, "text", 1);
$this->widgets['trvTeste']->append_column($column);
// Conecta a coluna ao sinal de renderização
$column->set_cell_data_func($render, array($this, "trvTeste_onRender"));
// Popula o model
$model->append(array("Valor 1", "Valor 2"));
$model->append(array("Valor 3", "Valor 4"));
$model->append(array("Valor 5", "Valor 6"));
$model->append(array("Valor 7", "Valor 8"));
$model->append(array("Valor 9", "Valor 10"));
// Cria a janela
$this->widgets['frmTeste'] = new GtkWindow();
$this->widgets['frmTeste']->set_size_request(200, 200);
$this->widgets['frmTeste']->set_resizable(FALSE);
$this->widgets['frmTeste']->set_title("Teste");
$this->widgets['frmTeste']->add($this->widgets['trvTeste']);
$this->widgets['frmTeste']->set_position(GTK::WIN_POS_CENTER);
$this->widgets['frmTeste']->show_all();
// Conecta o destroy
$this->widgets['frmTeste']->connect_simple(
"destroy",
array("Gtk", "main_quit")
);
}
// Método de renderização do treeview
public function trvTeste_onRender($column, $cell, $model, $iter)
{
// Busca a linha
$path = $model->get_path($iter);
$row = $path[0];
// Verifica a cor
if($row % 2 == 1)
{
$color = "#D5E1E8";
}
else
{
$color = "#FFFFFF";
}
// Pinta o fundo da linha
$cell->set_property("cell-background", $color);
}
}
// Inicia a aplicação
$teste = new Teste();
gtk::main();
Referências
http://gtk.php.net/manual/en/gtk.gtkcelllayout.method.set_cell_data_func.php