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
- 9213 reads