3

ユーザーがページボタンのいずれかを右クリックすると表示されるカスタムポップアップメニューを持つ Gtk.Notebook があります。

ユーザーがクリックしたノートブックのページを知るにはどうすればよいですか? メニューにアクションを追加して、現在のページにしたいと考えています。

notebook.button_press_event.connect( (wid,evt) => {
    if ( evt.button==3 ) {
        // which page button did the user click on?
        notebook.set_current_page( «clicked no tab» );
        // ... make it the current page
    }
}

位置でタブを見つけようとしました:

int numtab = notebook.get_tab_at_pos((int)evt.x, (int)evt.y);

get_tab_at_posしかし、または同様の方法はないようです。

4

1 に答える 1

2

1 つの解決策は、ここで提案されているように Gtk.EventBox を使用することです(PHP コード):

$window = new GtkWindow();
$window->set_size_request(400, 240);
$window->connect_simple('destroy', array('Gtk','main_quit'));
$window->add($vbox = new GtkVBox());

// setup notebook
$notebook = new GtkNotebook(); // note 1
$vbox->pack_start($notebook);

// add two tabs of GtkLabel
add_new_tab($notebook, new GtkLabel('Notebook 1'), 'Label #1');
add_new_tab($notebook, new GtkLabel('Notebook 2'), 'Label #2');

// add a thrid tab of GtkTextView
$buffer = new GtkTextBuffer();
$view = new GtkTextView();
$view->set_buffer($buffer);
$view->set_wrap_mode(Gtk::WRAP_WORD);
add_new_tab($notebook, $view, 'TextView');

$window->show_all();
Gtk::main();

// add new tab
function add_new_tab($notebook, $widget, $tab_label) {
    $eventbox = new GtkEventBox();
    $label = new GtkLabel($tab_label);
    $eventbox->add($label); // note 2
    $label->show(); // note 3
    $eventbox->connect('button-press-event', 'on_tab', $tab_label); // note 4
    $notebook->append_page($widget, $eventbox); // note 5
}

// function that is called when user click on tab
function on_tab($widget, $event, $tab_label) {  // note 6
    echo "tab clicked = $tab_label\n";
}
于 2016-09-19T14:57:28.980 に答える