Настройка контекстных меню в программах Python wwebkit GTK - PullRequest
3 голосов
/ 02 сентября 2011

Я работал над использованием модулей python webkit и gtk, чтобы превратить страницу HTML / Javascript в настольное приложение.Для этого я создал окно webkit, в котором почти нет функций, кроме webview.

import webkit, gtk, subprocess
w = gtk.Window(gtk.WINDOW_TOPLEVEL)
w.set_resizable(False)
w.set_size_request(900,600)
w.connect("delete_event", gtk.main_quit)
scroll_window=gtk.ScrolledWindow(None, None)
web = webkit.WebView()
web.open('/home/user/HTML/mypage.html')
settings = web.get_settings()
settings.set_property('enable-default-context-menu', True)
scroll_window.add(web)
w.add(scroll_window)
w.show_all()
gtk.main()

Это прекрасно работает, кроме контекстных меню.Когда я щелкаю правой кнопкой мыши в большинстве областей страницы, в контекстном меню отображаются следующие параметры: назад, вперед, остановка, перезагрузка.

Но когда я щелкаю правой кнопкой мыши ссылку, я получаю: открыть ссылку,открыть ссылку в новом окне, скачать связанный файл, скопировать местоположение ссылки.

Я бы хотел настроить это так, чтобы при щелчке правой кнопкой мыши на ссылке я получал только: открыть ссылку

I 'Я гуглил и смотрел другие посты о переполнении стека, но хотя я могу узнать, как отключить контекстные меню, я не могу найти, как их настроить.

PS Если вы не можете сказать, ясовершенно новый для python и очень новый для модулей gtk и webkit.

1 Ответ

1 голос
/ 16 июля 2014

Для настройки контекстного меню сначала необходимо добавить соответствующий обратный вызов context-menu. Эта функция может изменять отображаемое контекстное меню, используя методы добавления или удаления. Вы можете добавить gtk.ImageMenuItem. Это должно работать в качестве примера:

def callback(webview, context_menu, hit_result_event, event):
    option = gtk.ImageMenuItem('Do it')
    option.connect('activate', option_activate_cb)
    context_menu.append(option)
    option.show()

def option_activate_cb(image_menu_item):
    print('It works.')

web.connect('context-menu', callback)

Еще одно примечание: вам не нужно включать контекстное меню. Он включен по умолчанию.

...