WebKit バインドは PyObjC に含まれている。
Fedora の gir には WebKit2 が含まれている。
もしかしたら共通コードでイケるんでね?
#!/usr/bin/env python3
import objc
from AppKit import *
from WebKit import *
class WView(WKWebView):
def init(self):
config = WKWebViewConfiguration.new()
objc.super(WView, self).initWithFrame_configuration_(NSZeroRect, config)
return self
class Win(NSWindow):
def init(self):
frame = NSMakeRect(100, 400, 900, 600)
objc.super(Win, self).initWithContentRect_styleMask_backing_defer_(
frame,
NSTitledWindowMask |
NSClosableWindowMask |
NSResizableWindowMask |
NSMiniaturizableWindowMask,
NSBackingStoreBuffered,
False)
self.setTitle_('Web')
self.setDelegate_(self)
# view
self.webview = WView.new()
self.webview.setFrameSize_(self.contentView().frame().size)
self.contentView().addSubview_(self.webview)
# url
url = NSURL.URLWithString_('https://www.google.com/')
req = NSURLRequest.requestWithURL_(url)
self.webview.loadRequest_(req)
return self
def windowDidResize_(self, sender):
self.webview.setFrameSize_(self.contentView().frame().size)
class Menu(NSMenu):
def init(self):
objc.super(Menu, self).init()
item_app = NSMenuItem.new()
self.addItem_(item_app)
menu_app = NSMenu.new()
item_app.setSubmenu_(menu_app)
item_quit = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', 'q')
menu_app.addItem_(item_quit)
return self
NSApplication.sharedApplication()
window = Win.new()
window.makeKeyAndOrderFront_(window)
NSApp.setMainMenu_(Menu.new())
NSApp.activateIgnoringOtherApps_(True)
NSApp.run()
PyObjC
#!/usr/bin/env python3
import sys, gi
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit2', '4.0')
from gi.repository import Gtk, GLib, WebKit2
class WebView(WebKit2.WebView):
def __init__(self, ctx):
WebKit2.WebView.__init__(self, web_context=ctx)
class Win(Gtk.ApplicationWindow):
def __init__(self, app):
Gtk.ApplicationWindow.__init__(self, application=app)
#
ctx = WebKit2.WebContext()
self.webkit = WebView(ctx)
self.add(self.webkit)
self.webkit.load_uri('https://www.google.com/')
#
self.resize(900, 600)
self.show_all()
class App(Gtk.Application):
__gtype_name__ = 'App'
def __init__(self):
GLib.set_prgname('App')
Gtk.Application.__init__(self)
def do_startup(self):
Gtk.Application.do_startup(self)
Win(self)
def do_activate(self):
self.props.active_window.present()
App().run(sys.argv)
PyGObject
全然違ったwwwww
Apple さん、なんで URL は文字列じゃダメなの?
GNOME さん、WebKit2.WebView() ではエラーになるんですけど?
実は我がアプリに本棚機能を付けようかと考えて。
WebKit からローカル HTML でやれば GNOME, macOS 共通にできるかなって。
こりゃ無理だ。