在使用python编写基于webkit和gtk的程序时如何自定义上下文菜单

3

我一直在使用Python的webkit和gtk模块将HTML / Javascript页面转换为桌面应用程序。为此,我创建了一个WebKit窗口,除了Web视图之外几乎没有任何功能。

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()

这个工作很不错,除了右键菜单。当我在页面的大多数区域点击右键时,上下文菜单会给我以下选项:返回、前进、停止、重新加载。
但是当我右键点击链接时,我会得到:打开链接、在新窗口中打开链接、下载链接文件、复制链接位置。
我希望自定义右键菜单,这样当我右键点击链接时,只会得到:打开链接。
我已经搜索过谷歌并查看了其他stack overflow帖子,但尽管我可以找到如何禁用上下文菜单,但我无法找到如何自定义它们。
附言:除非你看不出来,否则我对Python相当新,对gtk和webkit模块非常新。
1个回答

1

如果要自定义上下文菜单,首先需要添加相应的“context-menu”回调函数。该函数可以使用append或remove方法修改显示的上下文菜单。您可以附加一个gtk.ImageMenuItem。以下示例应该有效:

def callback(webview, context_menu, event, hit_result_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)

一个额外的注意事项:您不需要启用上下文菜单。它已默认启用。

我认为你颠倒了 hit_test_result_event 和 event (顺序)(顺便说一下,这并不重要) - s4mdf0o1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接