如何将图像加载到 WebKit 浏览器中?
How do I load an image into a WebKit browser?
任务是实现一个可以打开任何文件的webkit浏览器。目前我只实现了html.
的开启
#!/usr/bin/env python3
import os
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit2', '4.0')
from gi.repository import Gtk, WebKit2
def on_click(button):
chooser = Gtk.FileChooserDialog(
title="Open File", action=Gtk.FileChooserAction.OPEN
)
chooser.add_buttons(
Gtk.STOCK_CANCEL,
Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN,
Gtk.ResponseType.OK,
)
chooser.set_default_response(Gtk.ResponseType.OK)
if chooser.run() == Gtk.ResponseType.OK:
filename = chooser.get_filename()
chooser.destroy()
f = open(filename)
name, ext = os.path.splitext(filename)
if ext == '.html':
webview.load_html(f.read())
else:
chooser.destroy()
win = Gtk.Window()
win.connect("destroy", Gtk.main_quit)
win.set_border_width(10)
win.set_default_size(400, 200)
hb = Gtk.HeaderBar()
hb.set_show_close_button(True)
hb.props.title = "Browser"
win.set_titlebar(hb)
box = Gtk.HBox()
button = Gtk.Button(label="Open file")
button.connect("clicked", on_click)
box.add(button)
hb.pack_start(box)
webview = WebKit2.WebView()
win.add(webview)
win.show_all()
Gtk.main()
并尝试实现打开图片
#!/usr/bin/env python3
import os
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit2', '4.0')
from gi.repository import Gtk, WebKit2
def on_click(button):
chooser = Gtk.FileChooserDialog(
title="Open File", action=Gtk.FileChooserAction.OPEN
)
chooser.add_buttons(
Gtk.STOCK_CANCEL,
Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN,
Gtk.ResponseType.OK,
)
chooser.set_default_response(Gtk.ResponseType.OK)
if chooser.run() == Gtk.ResponseType.OK:
filename = chooser.get_filename()
chooser.destroy()
f = open(filename)
name, ext = os.path.splitext(filename)
pic_types = (
'.jpg', '.jpeg', '.jfif', '.pjpeg', '.pjp',
'.png', '.swg', '.webp'
)
image = Gtk.Image()
image.set_from_file(filename)
image.set_halign(Gtk.Align.START)
image.set_valign(Gtk.Align.START)
overlay.add_overlay(image)
win.add(overlay)
else:
chooser.destroy()
win = Gtk.Window()
win.connect("destroy", Gtk.main_quit)
win.set_border_width(10)
win.set_default_size(400, 200)
hb = Gtk.HeaderBar()
hb.set_show_close_button(True)
hb.props.title = "Browser"
win.set_titlebar(hb)
box = Gtk.HBox()
button = Gtk.Button(label="Open file")
button.connect("clicked", on_click)
box.add(button)
hb.pack_start(box)
webview = WebKit2.WebView()
overlay = Gtk.Overlay()
overlay.add(webview)
win.show_all()
Gtk.main()
图片打不开,请问是什么原因?如何打开任何扩展名的文件?如果您使用放置在页面 html 标签中的文件,也许可以做到这一点?
你可以使用webview.load_uri()
加载任何类型的文件,WebView
自己会担心如何显示它。
因此,on_click()
应该是这样的:
def on_click(button):
chooser = Gtk.FileChooserDialog(
title="Open File", action=Gtk.FileChooserAction.OPEN
)
chooser.add_buttons(
Gtk.STOCK_CANCEL,
Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN,
Gtk.ResponseType.OK,
)
chooser.set_default_response(Gtk.ResponseType.OK)
if chooser.run() == Gtk.ResponseType.OK:
filename = chooser.get_filename()
chooser.destroy()
# Use load_uri()
webview.load_uri("file://" + filename)
else:
chooser.destroy()
请注意,您必须使用 "file://" + filename
,因为这是浏览器知道您正在打开本地文件的方式。它的工作方式与 https://
相同,因为它告诉浏览器如何处理 link; https://
告诉浏览器该路径在网络上。
如果你在 Windows,你 可能 需要用 \
替换每个 /
,但我不能请确定,因为我不在 Windows.
任务是实现一个可以打开任何文件的webkit浏览器。目前我只实现了html.
的开启#!/usr/bin/env python3
import os
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit2', '4.0')
from gi.repository import Gtk, WebKit2
def on_click(button):
chooser = Gtk.FileChooserDialog(
title="Open File", action=Gtk.FileChooserAction.OPEN
)
chooser.add_buttons(
Gtk.STOCK_CANCEL,
Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN,
Gtk.ResponseType.OK,
)
chooser.set_default_response(Gtk.ResponseType.OK)
if chooser.run() == Gtk.ResponseType.OK:
filename = chooser.get_filename()
chooser.destroy()
f = open(filename)
name, ext = os.path.splitext(filename)
if ext == '.html':
webview.load_html(f.read())
else:
chooser.destroy()
win = Gtk.Window()
win.connect("destroy", Gtk.main_quit)
win.set_border_width(10)
win.set_default_size(400, 200)
hb = Gtk.HeaderBar()
hb.set_show_close_button(True)
hb.props.title = "Browser"
win.set_titlebar(hb)
box = Gtk.HBox()
button = Gtk.Button(label="Open file")
button.connect("clicked", on_click)
box.add(button)
hb.pack_start(box)
webview = WebKit2.WebView()
win.add(webview)
win.show_all()
Gtk.main()
并尝试实现打开图片
#!/usr/bin/env python3
import os
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit2', '4.0')
from gi.repository import Gtk, WebKit2
def on_click(button):
chooser = Gtk.FileChooserDialog(
title="Open File", action=Gtk.FileChooserAction.OPEN
)
chooser.add_buttons(
Gtk.STOCK_CANCEL,
Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN,
Gtk.ResponseType.OK,
)
chooser.set_default_response(Gtk.ResponseType.OK)
if chooser.run() == Gtk.ResponseType.OK:
filename = chooser.get_filename()
chooser.destroy()
f = open(filename)
name, ext = os.path.splitext(filename)
pic_types = (
'.jpg', '.jpeg', '.jfif', '.pjpeg', '.pjp',
'.png', '.swg', '.webp'
)
image = Gtk.Image()
image.set_from_file(filename)
image.set_halign(Gtk.Align.START)
image.set_valign(Gtk.Align.START)
overlay.add_overlay(image)
win.add(overlay)
else:
chooser.destroy()
win = Gtk.Window()
win.connect("destroy", Gtk.main_quit)
win.set_border_width(10)
win.set_default_size(400, 200)
hb = Gtk.HeaderBar()
hb.set_show_close_button(True)
hb.props.title = "Browser"
win.set_titlebar(hb)
box = Gtk.HBox()
button = Gtk.Button(label="Open file")
button.connect("clicked", on_click)
box.add(button)
hb.pack_start(box)
webview = WebKit2.WebView()
overlay = Gtk.Overlay()
overlay.add(webview)
win.show_all()
Gtk.main()
图片打不开,请问是什么原因?如何打开任何扩展名的文件?如果您使用放置在页面 html 标签中的文件,也许可以做到这一点?
你可以使用webview.load_uri()
加载任何类型的文件,WebView
自己会担心如何显示它。
因此,on_click()
应该是这样的:
def on_click(button):
chooser = Gtk.FileChooserDialog(
title="Open File", action=Gtk.FileChooserAction.OPEN
)
chooser.add_buttons(
Gtk.STOCK_CANCEL,
Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN,
Gtk.ResponseType.OK,
)
chooser.set_default_response(Gtk.ResponseType.OK)
if chooser.run() == Gtk.ResponseType.OK:
filename = chooser.get_filename()
chooser.destroy()
# Use load_uri()
webview.load_uri("file://" + filename)
else:
chooser.destroy()
请注意,您必须使用 "file://" + filename
,因为这是浏览器知道您正在打开本地文件的方式。它的工作方式与 https://
相同,因为它告诉浏览器如何处理 link; https://
告诉浏览器该路径在网络上。
如果你在 Windows,你 可能 需要用 \
替换每个 /
,但我不能请确定,因为我不在 Windows.