1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
import logging
import os
import platform
from webview.util import WebViewException
logger = logging.getLogger('pywebview')
guilib = None
forced_gui_ = None
def initialize(forced_gui=None):
def import_gtk():
global guilib
try:
import webview.platforms.gtk as guilib
logger.debug('Using GTK')
return True
except (ImportError, ValueError) as e:
logger.exception('GTK cannot be loaded')
return False
def import_qt():
global guilib
try:
import webview.platforms.qt as guilib
return True
except ImportError as e:
logger.exception('QT cannot be loaded')
return False
def import_cocoa():
global guilib
try:
import webview.platforms.cocoa as guilib
return True
except ImportError:
logger.exception('PyObjC cannot be loaded')
return False
def import_winforms():
global guilib
try:
import webview.platforms.winforms as guilib
return True
except ImportError as e:
logger.exception('pythonnet cannot be loaded')
return False
def try_import(guis):
while guis:
import_func = guis.pop(0)
if import_func():
return True
return False
global forced_gui_
if not forced_gui:
forced_gui = 'qt' if 'KDE_FULL_SESSION' in os.environ else None
forced_gui = os.environ['PYWEBVIEW_GUI'].lower() \
if 'PYWEBVIEW_GUI' in os.environ and os.environ['PYWEBVIEW_GUI'].lower() in ['qt', 'gtk', 'cef', 'mshtml'] \
else None
forced_gui_ = forced_gui
if platform.system() == 'Darwin':
if forced_gui == 'qt':
guis = [import_qt, import_cocoa]
else:
guis = [import_cocoa, import_qt]
if not try_import(guis):
raise WebViewException('You must have either PyObjC (for Cocoa support) or Qt with Python bindings installed in order to use pywebview.')
elif platform.system() == 'Linux' or platform.system() == 'OpenBSD':
if forced_gui == 'qt':
guis = [import_qt, import_gtk]
else:
guis = [import_gtk, import_qt]
if not try_import(guis):
raise WebViewException('You must have either QT or GTK with Python extensions installed in order to use pywebview.')
elif platform.system() == 'Windows':
guis = [import_winforms]
if not try_import(guis):
raise WebViewException('You must have pythonnet installed in order to use pywebview.')
else:
raise WebViewException('Unsupported platform. Only Windows, Linux, OS X, OpenBSD are supported.')
return guilib
|