|
Problem In php-gtk2, suppose you have set up a form. Try enter something in a field and press Enter. We would expect the cursor to move to the next field. But nothing happens! You can only move to the next field by pressing the Tab key.
Supppose you would like the Enter key to behave similar to the Tab key, that is, when you press Enter, the cursor will automatically move to the next field as shown below:

Solution
Sample Code Note: use if ($event->keyval!=65293) if your version of php-gtk2 does not have Gdk::KEY_Return defined.
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
| <?php $window = new GtkWindow(); $window->set_size_request(400, 240); $window->connect_simple('destroy', array('Gtk','main_quit')); $window->add($vbox = new GtkVBox());
// display title
$title = new GtkLabel("Use Enter to Move to Next Field - Part 1\n". " using key-press-evnet on GtkEntry"); $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);
$fields = array('Item number', 'Item Description', 'Unit price', 'Quantity'); $field_size = array(120, 200, 80, 80); $entry = array(); // to store the text entries
$table = new GtkTable(); display_table($table, $fields, $field_size); // display the table
$vbox->pack_start($table);
function display_table($table, $fields, $field_size) { global $entry; $row = 0; foreach ($fields as $field) { $label = new GtkLabel(" $field: "); $alignment = new GtkAlignment(1, .5, 0, 0); $alignment->add($label); $table->attach($alignment, 0, 1, $row, $row+1, Gtk::FILL, Gtk::SHRINK, 0, 0);
$entry[$row] = new GtkEntry(); $alignment = new GtkAlignment(0, .5, 0, 0); $alignment->add($entry[$row]); $entry[$row]->set_size_request($field_size[$row], -1); $table->attach($alignment, 1, 2, $row, $row+1); $entry[$row]->connect('key-press-event', 'on_keypress', $row); // note 1
++$row; } }
// create a submit button
$button = new GtkButton('Submit'); $button->set_size_request(60, 28); $button->connect('clicked', 'on_click'); $row = count($fields); $alignment = new GtkAlignment(0, 0.5, 0, 0); $alignment->add($button); $table->attach($alignment, 1, 2, $row, $row+1);
$window->show_all(); Gtk::main();
function on_click($button) {
|
- Note that this is only 70% of the sample code. You have to be a registered member to see the entire sample code. Please login or register.
- Registration is free and immediate.
- Have some doubt about the registration? Please read this forum article.
Explanation
- Register the key-press-event on each GtkEntry field. Note that we pass the row number along with the signal so that we know which row the cursor is currently on.
- If key press is not Enter, return a
false to let the default handler handles it.
- Move focus to next row.
- If it's the last field, move focus to the Submit button, and manually generate a button click.
Related Links
User reviews Average user ratings: 5.0 (from 1 user) Note: You have to be a registered member to leave a comment. Free registration here. |
July 17, 2008 6:26am