2016-09-19 135 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

相關問題