У цьому туторіалі ми побудуємо власний веб-браузер, використовуючи Python. Ми також будемо використовувати бібліотеку PyQt. Для початку необхідно встановити наступні пакети:
sudo pip install python-qt4
sudo apt-get install qt4-designer
sudo apt-get install pyqt4-dev-tools
sudo apt-get install python-kde4
Якщо python-kde4 не хоче встановлюватись, то оновіть свій репозиторій. Якщо ви кодите під Ubuntu чи Debian, то скористайтесь цим лінком.
Створення графічного інтерфейсу з PyQt
Знайдіть і відкрийте програму qt4-designer. Ви побачите наступне:
Виберіть Main Window
і натисніть Create
(Створити). Тепер ми маємо інтерфейсне вікно, яке і буде нашим графічним інтерфейсом. Перетягніть компонент KWebView
(можете знайти в графі пошук) на наше вікно. Якщо у списку ваших компонентів з'являється тільки компонент QtWebView
тоді виберіть його. Також додайте компонент Line Edit на верхню область вікна. Натисніть File > Save As > browser.ui
. Запустіть команду:
pyuic4 browser.ui > browser.py
Ця команда згенерує пайтонівський файл. Видаліть рядок from kwebview import KWebView
з нижньої частини файлу browser.py
. Змініть KWebView
на QtWebView
. Ми будемо використовувати QtWebView
замість KWebView
. Якщо ви занадто ліниві, щоб все це робити, то просто скопіюйте файл browser.py внизу нашого посту.
Створення логіки
Створіть файл run.py
з наступним вмістом:
import sys
from browser import BrowserDialog
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QUrl
from PyQt4.QtWebKit import QWebView
class MyBrowser(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
QWebView.__init__(self)
self.ui = BrowserDialog()
self.ui.setupUi(self)
self.ui.lineEdit.returnPressed.connect(self.loadURL)
def loadURL(self):
url = self.ui.lineEdit.text()
self.ui.qwebview.load(QUrl(url))
self.show()
#self.ui.lineEdit.setText("")
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MyBrowser()
myapp.ui.qwebview.load(QUrl('https://web.archive.org/web/20230327094038/http://www.talkera.org/python'))
myapp.show()
sys.exit(app.exec_())
Цей код використовує графічний інтерфейс описаний у файлі browser.py
і додає логіку до нього. Рядки:
self.ui.lineEdit.returnPressed.connect(self.loadURL)
def loadURL(self):
url = self.ui.lineEdit.text()
self.ui.qwebview.load(QUrl(url))
self.show()
#self.ui.lineEdit.setText("")
Перший рядок описує подію(колбек). Якщо користувач натискає enter (returnPressed), це викличе функцію loadURL
. Тобто це означає, що в будь-якому випадку, коли ви натисните enter сторінка завантажиться відповідно до вищезгаданої функції. Якщо ви все зробили правильно, то браузер повинен запуститися наступною командою:
python run.py
Будь-ласка, впевніться, що ви використовуєте повний урл: http://talkera.org включаючи префікс http://
. Ваш браузер повинен запуститись:
Якщо ваш код не запускається, то використайте наступний код(або перевірте і знайдіть різницю): browser.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'browser.ui'
#
# Created: Fri Jan 30 20:49:32 2015
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QApplication
from PyQt4.QtCore import QUrl
from PyQt4.QtWebKit import QWebView
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class BrowserDialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(1024, 768)
self.qwebview = QWebView(Dialog)
self.qwebview.setGeometry(QtCore.QRect(0, 50, 1020, 711))
self.qwebview.setObjectName(_fromUtf8("kwebview"))
self.lineEdit = QtGui.QLineEdit(Dialog)
self.lineEdit.setGeometry(QtCore.QRect(10, 20, 1000, 25))
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Browser", "Browser", None))
run.py
import sys
from browser import BrowserDialog
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QUrl
from PyQt4.QtWebKit import QWebView
class MyBrowser(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
QWebView.__init__(self)
self.ui = BrowserDialog()
self.ui.setupUi(self)
self.ui.lineEdit.returnPressed.connect(self.loadURL)
def loadURL(self):
url = self.ui.lineEdit.text()
self.ui.qwebview.load(QUrl(url))
self.show()
#self.ui.lineEdit.setText("")
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MyBrowser()
myapp.ui.qwebview.load(QUrl('https://web.archive.org/web/20230327094038/http://www.talkera.org/python'))
myapp.show()
sys.exit(app.exec_())
Ще немає коментарів