Problem
You would like to display set the background color of a GtkTreeView as shown below:
Solution
- Set the background color of the GtkTreeView with GtkWidget::modify_base().
- Don't forget to set the background color of each row by setting the property of GtkCellrenderer::cell-background().
Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | <?php $window = new GtkWindow(); $window->set_size_request(400, 320); $window->connect_simple('destroy', array('Gtk','main_quit')); $window->add($vbox = new GtkVBox()); // display title $title = new GtkLabel("Set the background color of GtkTreeView"); $title->modify_font(new PangoFontDescription("Times New Roman Italic 10")); $title->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse("#0000ff")); $title->set_size_request(-1, 40); $vbox->pack_start($title, 0, 0); $vbox->pack_start(new GtkLabel(), 0, 0); // the 2D table $data = array( array('row0', 'item 42', 2, 3.1), array('row1', 'item 36', 20, 6.21), array('row2', 'item 21', 8, 9.36), array('row3', 'item 10', 11, 12.4), array('row4', 'item 7', 5, 15.5), array('row5', 'item 4', 17, 18.6), array('row6', 'item 3', 20, 21.73)); display_table ($vbox, $data); function display_table($vbox, $data) { // Set up a scroll window $scrolled_win = new GtkScrolledWindow(); $scrolled_win->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); $vbox->pack_start($scrolled_win); // Creates the list store if (defined("GObject::TYPE_STRING")) { $model = new GtkListStore(GObject::TYPE_STRING, GObject::TYPE_STRING, GObject::TYPE_LONG, GObject::TYPE_DOUBLE); } else { $model = new GtkListStore(Gtk::TYPE_STRING, Gtk::TYPE_STRING, Gtk::TYPE_LONG, Gtk::TYPE_DOUBLE); } $field_header = array('Row #', 'Description', 'Qty', 'Price'); $field_justification = array(0.0, 0.0, 0.5, 1.0); // Creates the view to display the list store $view = new GtkTreeView($model); $scrolled_win->add($view); $view->modify_base(Gtk::STATE_NORMAL, GdkColor::parse("#FFFF00")); // note 1 // Creates the columns for ($col=0; $col<count($field_header); ++$col) { $cell_renderer = new GtkCellRendererText(); $cell_renderer->set_property("xalign", $field_justification[$col]); $column = new GtkTreeViewColumn($field_header[$col], $cell_renderer, 'text', $col); $column->set_alignment($field_justification[$col]); $column->set_sort_column_id($col); // set the header font and color $label = new GtkLabel($field_header[$col]); $label->modify_font(new PangoFontDescription("Arial Bold")); $label->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse("#0000FF")); $column->set_widget($label); $label->show(); // setup self-defined function to display alternate row color $column->set_cell_data_func($cell_renderer, "format_col"); $view->append_column($column); } // pupulates the data for ($row=0; $row<count($data); ++$row) { $values = array(); for ($col=0; $col<count($data[$row]); ++$col) { $values[] = $data[$row][$col]; } $model->append($values); } } // self-defined function to display alternate row color function format_col($column, $cell, $model, $iter) { $path = $model->get_path($iter); $row_num = $path[0]; $row_color = ($row_num%2==1) ? '#dddddd' : '#ffff00'; // note 2 $cell->set_property('cell-background', $row_color); } $window->show_all(); Gtk::main(); ?> |
Output
As shown above.
Explanation
- Set the background color of the GtkTreeView to yellow.
- Test for odd and even rows and set the background color of each row accordingly. Set one of the row color to be the same as the background color of GtkTreeView.
Related Articles
- How to display a 2D array in GtkTreeView - Part 1?
- How to display a 2D array in GtkTreeView - Part 2 - set alignment and headers?
- How to display a 2D array in GtkTreeView - Part 3 - with alternate row colors?
- How to display a 2D array in GtkTreeView - Part 4 - format cell content?
- How to display a 2D array in GtkTreeView - Part 5 - get user selection?
- How to use GtkCellRendererCombo - Part 1 - setup?
- How to use GtkCellRendererCombo - Part 2 - process combobox?
- How to use GtkCellRendererCombo - Part 3 - process user selection?
Read more...