在Python Webkit GTK程序中自定义上下文菜单

3 投票
1 回答
1166 浏览
提问于 2025-04-17 01:12

我一直在用Python的webkit和gtk模块,把一个HTML/JavaScript页面变成桌面应用程序。为此,我创建了一个几乎没有其他功能的webkit窗口,只有网页视图。

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'的回调函数。这个函数可以用来修改显示的右键菜单,你可以通过添加或删除菜单项来实现。你可以添加一个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)

还有一点需要注意:你不需要手动开启右键菜单,它默认就是开启的。

撰写回答