View difference between Paste ID: vq3GFhv3 and
SHOW:
|
|
- or go back to the newest paste.
1 | - | |
1 | + | # -*- coding: utf-8 -*- |
2 | """ | |
3 | Python Hack-a-thon 2010.11 / PyQt4 Hands on | |
4 | About QtWebKit 03 : ScreenShot機能を付けてみる | |
5 | """ | |
6 | ||
7 | import sys | |
8 | import time | |
9 | from PyQt4 import QtCore | |
10 | from PyQt4 import QtGui | |
11 | from PyQt4 import QtWebKit | |
12 | from MainWindowUI import Ui_MainWindow | |
13 | from ScreenShot import ScreenShot | |
14 | ||
15 | class MainWindow(QtGui.QMainWindow, Ui_MainWindow): | |
16 | def __init__(self, *args, **kw): | |
17 | QtGui.QMainWindow.__init__(self, *args, **kw) | |
18 | self.setupUi(self) | |
19 | ||
20 | self.web_page = self.webView.page() | |
21 | self.main_frame = self.web_page.mainFrame() | |
22 | self.setAddressBarUrl(self.webView.url()) | |
23 | self.back_button.clicked.connect(self.webView.back) | |
24 | self.forward_button.clicked.connect(self.webView.forward) | |
25 | self.web_page.linkHovered.connect(self.showUrlInStatusBar) | |
26 | self.actionQuit.setShortcut("Ctrl+Q") | |
27 | ||
28 | self.load_progress_bar = QtGui.QProgressBar() | |
29 | self.statusBar().addPermanentWidget(self.load_progress_bar) | |
30 | self.statusBar().setSizeGripEnabled(False) | |
31 | ||
32 | self.load_progress_bar.setSizePolicy( | |
33 | QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred)) | |
34 | ||
35 | progress_bar_size = self.load_progress_bar.size() | |
36 | progress_bar_size.setWidth(150) | |
37 | ||
38 | self.load_progress_bar.setMinimumSize(progress_bar_size) | |
39 | self.load_progress_bar.resize(progress_bar_size) | |
40 | ||
41 | self.screenshot = ScreenShot() | |
42 | self.screenshot.renderFinished.connect(self.saveScreenShot) | |
43 | ||
44 | ||
45 | ||
46 | @QtCore.pyqtSlot(bool, name="on_actionQuit_triggered") | |
47 | def quitApplication(self, checked=False): | |
48 | sys.exit(QtGui.QApplication.instance().quit()) | |
49 | ||
50 | ||
51 | @QtCore.pyqtSlot(name="on_address_bar_returnPressed") | |
52 | def loadNewPage(self): | |
53 | url = self.address_bar.text() | |
54 | if not QtCore.QRegExp(ur"^(https?)|(ftp)://").exactMatch(url): | |
55 | url_str = QtCore.QString(u"http://") + url | |
56 | ||
57 | self.webView.setUrl(QtCore.QUrl(url_str)) | |
58 | ||
59 | ||
60 | @QtCore.pyqtSlot(QtCore.QUrl, name="on_webView_urlChanged") | |
61 | def setAddressBarUrl(self, url): | |
62 | self.address_bar.setText(url.toString()) | |
63 | ||
64 | ||
65 | def showUrlInStatusBar(self, link, title, textContent): | |
66 | self.statusBar().showMessage(link) | |
67 | ||
68 | ||
69 | @QtCore.pyqtSlot(QtCore.QUrl, name="on_webView_linkClicked") | |
70 | def setAddressBarAndLoadPage(self, url): | |
71 | self.address_bar.setText(url.toString()) | |
72 | self.webView.load(url) | |
73 | ||
74 | ||
75 | @QtCore.pyqtSlot(name="on_webView_loadStarted") | |
76 | def resetProgressBar(self): | |
77 | self.load_progress_bar.setValue(0) | |
78 | ||
79 | ||
80 | @QtCore.pyqtSlot(int, name="on_webView_loadProgress") | |
81 | def setProgressBarValue(self, value): | |
82 | self.load_progress_bar.setValue(value) | |
83 | ||
84 | ||
85 | @QtCore.pyqtSlot(name="on_take_screenshot_button_clicked") | |
86 | def takeScreenShot(self): | |
87 | self.screenshot.render(self.webView.url()) | |
88 | ||
89 | ||
90 | def saveScreenShot(self, image): | |
91 | image.save("%s.png" % time.time()) | |
92 | self.statusBar().showMessage(u"saved : %s" % self.webView.url().toString()) | |
93 | ||
94 | ||
95 | def main(): | |
96 | application = QtGui.QApplication(sys.argv) | |
97 | ||
98 | web_settings = QtWebKit.QWebSettings.globalSettings() | |
99 | web_settings.setAttribute(QtWebKit.QWebSettings.PluginsEnabled, False) | |
100 | web_settings.setAttribute(QtWebKit.QWebSettings.JavaEnabled, True) | |
101 | web_settings.setAttribute(QtWebKit.QWebSettings.JavascriptEnabled, True) | |
102 | web_settings.setAttribute(QtWebKit.QWebSettings.LocalContentCanAccessRemoteUrls, True) | |
103 | ||
104 | main_window = MainWindow() | |
105 | main_window.show() | |
106 | ||
107 | application.exec_() | |
108 | ||
109 | ||
110 | if __name__ == "__main__": | |
111 | main() |