PyQT webkit - пример использования
Primary tabs
Рассмотрим некоторые базовые приёмы использования PyQT webkit .
Для начала просто откроем html-страничку внутри нашей формы:
# -*- coding: utf-8 -*- import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import * app = QApplication(sys.argv) web = QWebView() #откроем некоммерческую версию страницу яндекса web.load(QUrl("123")) # 123= http://ya.ru # показываем окно web.show() sys.exit(app.exec_())
Движемся дальше
А теперь давайте рассмотрим пример позволяющий добавить в наш браузер:
- адресную строку
- кнопки "предыдущая/следующая"
- кнопку перезагрузки страницы
- кнопку отмены загрузки
мы будем использовать два файла с исходниками
- в первом пользовательский интерфейс окна нашего браузера:
# -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui from PyQt4 import QtWebKit """ класс который мы опишем ниже будет отвечать а внешний вид нашего первобытного браузера """ class Ui_HttpWidget(object): #в контсрукторе получаем класс типа HttpWidget """ def setupUi(self, HttpWidget): HttpWidget.setObjectName("HttpWidget") HttpWidget.resize(500, 336) self.verticalLayout = QtGui.QVBoxLayout(HttpWidget) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") # добавляем кнопку "прдыдущая(назад)" self.back = QtGui.QPushButton(HttpWidget) self.horizontalLayout.addWidget(self.back) # добавляем кнопку "следующая(вперёд)" self.next = QtGui.QPushButton(HttpWidget) self.next.setEnabled(True) # разрешаем нажатие self.next.setLayoutDirection(QtCore.Qt.RightToLeft) self.next.setObjectName("next") self.horizontalLayout.addWidget(self.next) # добавляем кнопку остановки загрузки self.stop = QtGui.QPushButton(HttpWidget) self.stop.setObjectName("stop") self.horizontalLayout.addWidget(self.stop) # добавляем кнопку перезагрузки страницы self.reload = QtGui.QPushButton(HttpWidget) self.reload.setObjectName("reload") self.horizontalLayout.addWidget(self.reload) # добавляем адресную строку ))))) self.url = QtGui.QLineEdit(HttpWidget) self.url.setObjectName("url") self.horizontalLayout.addWidget(self.url) self.verticalLayout.addLayout(self.horizontalLayout) # а вот и закрепление вебкита! =)) self.webView = QtWebKit.QWebView(HttpWidget) self.webView.setUrl(QtCore.QUrl("about:blank")) self.webView.setObjectName("webView") self.verticalLayout.addWidget(self.webView) self.retranslateUi(HttpWidget)#запускаем перевод # определяем метод для перевода надписей def retranslateUi(self, HttpWidget): #translate() необходима дял возможно перевода текста HttpWidget.setWindowTitle(QtGui.QApplication.translate("HttpWidget", "Form", None, QtGui.QApplication.UnicodeUTF8)) self.back.setToolTip(QtGui.QApplication.translate("HttpWidget", "Back", None, QtGui.QApplication.UnicodeUTF8)) self.back.setText(QtGui.QApplication.translate("HttpWidget", "Back", None, QtGui.QApplication.UnicodeUTF8)) self.next.setToolTip(QtGui.QApplication.translate("HttpWidget", "Next", None, QtGui.QApplication.UnicodeUTF8)) self.next.setText(QtGui.QApplication.translate("HttpWidget", "Next", None, QtGui.QApplication.UnicodeUTF8)) self.stop.setToolTip(QtGui.QApplication.translate("HttpWidget", "Stop", None, QtGui.QApplication.UnicodeUTF8)) self.stop.setText(QtGui.QApplication.translate("HttpWidget", "Stop", None, QtGui.QApplication.UnicodeUTF8)) self.reload.setToolTip(QtGui.QApplication.translate("HttpWidget", "Reload", None, QtGui.QApplication.UnicodeUTF8)) self.reload.setText(QtGui.QApplication.translate("HttpWidget", "Reload", None, QtGui.QApplication.UnicodeUTF8))
во втором определим сигналы и подключим их к слотам - таким образом мы сможем управлять объектом QtWebKit.QWebView =
# -*- coding: utf-8 -*- import sys from PyQt4 import QtCore, QtGui from httpWidget import Ui_HttpWidget from PyQt4 import QtWebKit class httpWidget(QtGui.QWidget): # конструктор класса def __init__(self, parent=None): super(httpWidget, self).__init__(parent) # привязываем атрибут ui - user interface self.ui = Ui_HttpWidget() self.ui.setupUi(self) self.ty = 12 # устанавливаем отступы l = self.layout() l.setMargin(10) #добавляем слой и определяем отступы self.ui.horizontalLayout.setMargin(5) # "некоммерческий" яндекс url = '123' # 123 заменить на http://ya.ru self.ui.url.setText(url) # load page self.ui.webView.setUrl(QtCore.QUrl(url)) # history buttons: self.ui.back.setEnabled(False) self.ui.next.setEnabled(False) # секция подключения сигналов к слотам QtCore.QObject.connect(self.ui.back,QtCore.SIGNAL("clicked()"), self.back) QtCore.QObject.connect(self.ui.next,QtCore.SIGNAL("clicked()"), self.next) QtCore.QObject.connect(self.ui.url,QtCore.SIGNAL("returnPressed()"), self.url_changed) QtCore.QObject.connect(self.ui.webView,QtCore.SIGNAL("linkClicked (const QUrl&)"), self.link_clicked) QtCore.QObject.connect(self.ui.webView,QtCore.SIGNAL("urlChanged (const QUrl&)"), self.link_clicked) QtCore.QObject.connect(self.ui.webView,QtCore.SIGNAL("loadProgress (int)"), self.load_progress) QtCore.QObject.connect(self.ui.webView,QtCore.SIGNAL("titleChanged (const QString&)"), self.title_changed) QtCore.QObject.connect(self.ui.reload,QtCore.SIGNAL("clicked()"), self.reload_page) QtCore.QObject.connect(self.ui.stop,QtCore.SIGNAL("clicked()"), self.stop_page) def url_changed(self): """ Url have been changed by user """ page = self.ui.webView.page() history = page.history() if history.canGoBack(): # если есть "предыдущая" страница self.ui.back.setEnabled(True) else: self.ui.back.setEnabled(False) if history.canGoForward():# если есть "следующая" страница self.ui.next.setEnabled(True) else: self.ui.next.setEnabled(False) url = self.ui.url.text() self.ui.webView.setUrl(QtCore.QUrl(url)) def stop_page(self): """ останавливаем загрузку страницы """ self.ui.webView.stop() def title_changed(self, title): """ меняем заголовок окна в соответсвии с заголовком страницы """ self.setWindowTitle(title) def reload_page(self): """ перезагружаем страницу """ self.ui.webView.setUrl(QtCore.QUrl(self.ui.url.text())) def link_clicked(self, url): """ Если перешли по ссылке - то меняем адрес в адресной строке """ page = self.ui.webView.page() history = page.history() if history.canGoBack(): self.ui.back.setEnabled(True) else: self.ui.back.setEnabled(False) if history.canGoForward(): self.ui.next.setEnabled(True) else: self.ui.next.setEnabled(False) self.ui.url.setText(url.toString()) def load_progress(self, load): """ Page load progress """ if load == 100: self.ui.stop.setEnabled(False) else: self.ui.stop.setEnabled(True) def back(self): """ Возвращаемся на преыдущую страницу если нажата кнопка "назад" """ page = self.ui.webView.page() history = page.history() history.back() if history.canGoBack(): self.ui.back.setEnabled(True) else: self.ui.back.setEnabled(False) def next(self): """ переходим на следующую страницу если была нажат соотв. кнопка """ page = self.ui.webView.page() history = page.history() history.forward() if history.canGoForward(): self.ui.next.setEnabled(True) else: self.ui.next.setEnabled(False) # точка входа в программу if __name__ == "__main__": app = QtGui.QApplication(sys.argv) myapp = httpWidget() myapp.show() sys.exit(app.exec_())
- Log in to post comments
- 8322 reads