Problem
You want to set up a pulldown menu as shown below:
Solution
- Pulldown menu is created in php-gtk2 using GtkComboBox
- The selection is read using GtkTreemodel::get_value()
(GtkTreeIter iter, int column)
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | <?php $window = new GtkWindow(); $window->connect_simple('destroy', array( 'Gtk', 'main_quit')); $window->set_size_request(400,150); $window->add($vbox = new GtkVBox()); // display title $title = new GtkLabel("Setup and process GtkComboBox"); $title->modify_font(new PangoFontDescription("Times New Roman Italic 10")); $title->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse("#0000ff")); $title->set_size_request(-1, 60); $vbox->pack_start($title, 0, 0); // the selection $list = array('item 1', 'item 2', 'item 3', 'item 4'); $vbox->pack_start($hbox=new GtkHBox(), 0, 0); $hbox->pack_start(new GtkLabel('Select: '), 0, 0); // Create a combobox $combobox = new GtkComboBox(); // Create a model if (defined("GObject::TYPE_STRING")) { $model = new GtkListStore(GObject::TYPE_STRING); } else { $model = new GtkListStore(Gtk::TYPE_STRING); } // Set up the combobox $combobox->set_model($model); // note 1 $cellRenderer = new GtkCellRendererText(); // note 2 $combobox->pack_start($cellRenderer); $combobox->set_attributes($cellRenderer, 'text', 0); // note 3 // Stuff the choices in the model foreach($list as $choice) { $model->append(array($choice)); } // Set up a hbox to contain the combobox as well as the Submit button $hbox->pack_start($combobox, 0, 0); $hbox->pack_start(new GtkLabel(' '), 0, 0); $hbox->pack_start($button = new GtkButton('Submit'), 0, 0); $button->set_size_request(60, 24); // Set up the event handler to respond to button click $button->connect('clicked', "on_button", $combobox); // note 4 // The callback function that is called when user clicks the submit button function on_button($button, $combobox) { $model = $combobox->get_model(); // note 5 $selection = $model->get_value($combobox->get_active_iter(), 0); // note 6 echo "You have selected: $selection!\n"; } $window->show_all(); Gtk::main(); ?> |
Output
As shown above.Explanation
- Binds the model to the combobox.
- The GtkCellrenderertext is just a class used to display the cell contents as text.
- The '0' here refers to the first column of the data model
$model
. - Note that we pass
$combobox
along so that we can have access to this when the user clicks the submit button. - Retrieves the $model from $combobox with
$combobox->get_model()
- The selection is read using GtkTreemodel::get_value()
(GtkTreeIter iter, int column)
. Note that we can get the selected iter with GtkCombobox::get_active()
Notes
You may want to take a look at How to setup and process GtkComboBoxEntry - Part 1? to compare the difference between GtkComboBox and GtkComboBoxEntry.
Read more...