QtWebKitで画像や動画を見られるようにするには?
経緯
自作アプリを使っているうちに、インターネットをちらちら確認しながら作業するのは、GUIの移動が面倒で、頭が痛くなって疲れてきますから、自分のアプリそのものにインターネットブラウザを取り付けてしまえ。と思うようになりました。仮に他ユーザーの立場からしても、そうした方が楽だと思うので、一石二鳥だと考えました。その方法を探したところ、Qt
には、QtWebKit
というモジュールがあります。ネットを方々探索するのですが、中々これを取り扱ったソースコードもなく、自分はWeb
系の知識が乏しいものでして、どうにかこういうものを作りました。ほぼここをpython化しました。 このコードを実行していただければお分かりいただけると思うのですが、インターネットでは、png
画像のみ表示ができ、動画は全く見れません。
フラッシュ画面なども移りません。http:\\youtube.com
とか、yahooに入っていただくと絵が欲しいと思われると思います。
質問
png
以外の画像や、動画を見るためには、どうすればいいのでしょうか?
ぼやき
自分で使うようなら、自分が気に入っているサイトのアドレスを全部リスト化してお気に入り状態をはじめから作ればいいだろうとは思いますが。コンボボックスなどに、気になるようなら加えて、それをsetUrl()すれば楽勝だとは思います。プログラミング的にWebの世界はあまり興味がないうえ、難しいイメージがあるため敬遠していました。それとプラグインです。プラグインを取り付けた成功体験がないため、よくわからないです。qJPEG.dllやqgif.dllが必要だとか見たことはあるのですが。
from PySide import QtGui
from PySide import QtCore
import sys
from PySide import QtWebKit
class WebMainWindow(QtGui.QMainWindow):
def __init__(self,parent=None):
super(WebMainWindow,self).__init__(parent=None)
self.webView = QtWebKit.QWebView()
self.webView.load(QtCore.QUrl("http://www.wikipedia.org/"))
self.setCentralWidget(self.webView)
self.progress = QtGui.QProgressBar()
self.progress.setRange( 0, 100 )
self.progress.setMinimumSize( 100, 20 )
self.progress.setSizePolicy( QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum )
self.progress.hide()
self.statusBar().addPermanentWidget( self.progress )
self.connect( self.webView, QtCore.SIGNAL( "loadProgress( int )" ), self.progress, QtCore.SLOT( "show()" ) )
self.connect( self.webView, QtCore.SIGNAL( "loadProgress( int )" ), self.progress, QtCore.SLOT( "setValue( int )" ) )
self.connect( self.webView, QtCore.SIGNAL( "loadFinished( bool )"), self.progress, QtCore.SLOT( "hide()" ) )
self.urlEdit = QtGui.QLineEdit()
self.urlEdit.setSizePolicy( QtGui.QSizePolicy.Expanding, self.urlEdit.sizePolicy().verticalPolicy() )
self.connect(self.urlEdit,QtCore.SIGNAL( "returnPressed()" ), QtCore.SLOT( "changeLocation" ) )
self.bar = QtGui.QToolBar()
self.addToolBar( self.bar )
self.bar.setMovable( False )
self.bar.addAction( self.webView.pageAction( QtWebKit.QWebPage.Back ) )
self.bar.addAction( self.webView.pageAction( QtWebKit.QWebPage.Forward ) )
self.bar.addAction( self.webView.pageAction( QtWebKit.QWebPage.Reload ) )
self.bar.addAction( self.webView.pageAction( QtWebKit.QWebPage.Stop ) )
self.bar.addWidget( self.urlEdit )
self.fileMenu = self.menuBar().addMenu( "&File" )
self.fileMenu.addAction( "Quit", QtGui.QApplication, QtCore.SLOT("quit()") )
self.connect( self.webView, QtCore.SIGNAL("loadFinished(bool)"),
self, QtCore.SLOT("loadFinished()"))
self.connect( self.webView, QtCore.SIGNAL("titleChanged(str)"),
self, QtCore.SLOT("setWindowTitle( str )"))
self.connect(self.webView.page(),QtCore.SIGNAL("linkHovered(str,str,str)"),
self, QtCore.SLOT("showLinkHover( str )"))
def changeLocation(self):
self.url_text = self.urlEdit.text()
self.urlEdit.setText(self.url_text)
self.webView.setUrl(self.url_text)
self.webView.setFocus(QtCore.Qt.FocusReason.OtherFocusReason)
def loadFinished(self):
self.urlEdit.setText(self.webView.url().toString())
def showLinkHover(self,link):
if link.isEmpty():
self.statusBar().clearMessage()
else:
self.statusBar().showMessage( "Open {0}".format( link ))
def main():
try:
QtGui.QApplication(sys.argv)
except Exception as e:
print(69,e)
websettings = QtWebKit.QWebSettings.globalSettings()
websettings.setAttribute(QtWebKit.QWebSettings.PluginsEnabled,True)
mainwindow = WebMainWindow()
mainwindow.show()
sys.exit(QtGui.QApplication.exec_())
if __name__ == "__main__":
main()