如何使用python Gtk和webkit在webview上叠加图像

时间:2014-02-05 19:13:56

标签: python webview webkit gtk pygtk

我需要有关如何在webview上叠加图像的帮助。我希望能够在网页上放置按钮或图像(webview对象) 所以我有以下

import gtk
import webkit
...
win=gtk.Window()
page=webkit.Webview()
page.open("http://www.google.com")
image=gtk.Image()
image.set_from_file("HappyFish.jpg")
container=gtk.Fixed()
win.add(container)
container.add(page)
container.add(image)
win.show_all()
gtk.main()

一切正常,除了页面覆盖图像或按钮(即使我将按钮放在容器中的页面之后),我需要它,以便我可以将图像放在网页的顶部...就像页面上的标志一样。 我不想将页面转换为图像并将两个图像叠加在另一个上面,它需要保持交互。我很感激这方面的任何帮助。

2 个答案:

答案 0 :(得分:2)

GTK + 3有一个dedicated APIGtkOverlay(更具体地说:它是在3.2版本中添加的)。

从您提供的代码看起来好像您正在使用PyGTK和GTK + 2,因此可能值得考虑转移到该功能的新版工具包。

gtk3-demo应用程序提供了叠加的良好演示。这个应用程序根据你的发行版保存在不同的包中(我不确定它是否在OSX / Windows上可用)所以你可能需要做一些环顾四周来找到它的正确包。

作为PyGObject和GTK3中的内容示例(注意:为适应Webkit和GTK api的更改而进行的一些更改):

from gi.repository import Gtk, WebKit
...
win = Gtk.Window()
overlay = Gtk.Overlay()
page = WebKit.WebView()
page.load_uri("http://www.google.com")
overlay.add(page)
image = Gtk.Image()
image.set_from_file("HappyFish.jpg")
image.set_halign(Gtk.Align.START)
image.set_valign(Gtk.Align.START)
overlay.add_overlay(image)
win.add(overlay)
win.show_all()
win.connect('destroy', Gtk.main_quit)
Gtk.main()

答案 1 :(得分:0)

怀疑这个操作仍然有任何用处,所以我将把它留给碰巧被GTK所困扰且没有叠加功能的人

    self.your_image = gtk.Image()
    #this image will be the top layer
    self.image_to_overlay = GdkPixbuf.Pixbuf.new_from_file("try_some_image_file")
    #this image will be the bottom image
    self.bottom_image = GdkPixbuf.Pixbuf.new_from_file("some_base_image")
    self.image_to_overlay.composite(self.bottom_image,
    0,0,
    self.bottom_image.props.width,self.bottom_image.props.height,
    0,0,
    1,1,
    GdkPixbuf.InterpType.BILINEAR,
    250)
    self.your_image.set_from_pixbuf(self.bottom_image)