2016-09-19 7 views
1

У меня есть Gtk.Notebook, у которого есть настраиваемое всплывающее меню, которое отображается, когда пользователь щелкает правой кнопкой мыши на любой из кнопок на странице.Как узнать, какую страницу из 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 или подобный метод.

+0

Так что вы хотите позвонить 'gtk_notebook_set_current_page()', когда пользователь нажимает на правой вкладке? Это то, что обычно используется левой кнопкой мыши, так зачем же это делать с правой кнопкой? –

+0

, потому что я отображает меню, которое будет выполнять действия на этой вкладке, а левая мышь полезна для других действий, спасибо за ваше вмешательство – bul

+0

левая кнопка мыши: вкладки переключателя, например – bul

ответ

0

Одним из решений может быть использование Gtk.EventBox as suggested here (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"; 
} 
+0

пытаясь понять, адаптироваться, и я говорю вам (возможно, не сразу) спасибо – bul

+0

он отлично работает. было немного сложнее, название вкладки = картинка + метка, и петля на вкладках, чтобы найти правильный. еще раз спасибо. – bul