Створення веб-браузера з Python та PyQt

5 хв. читання

У цьому туторіалі ми побудуємо власний веб-браузер, використовуючи 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. Ви побачите наступне:

Створення веб-браузера з Python та PyQt

Виберіть 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://. Ваш браузер повинен запуститись: Створення веб-браузера з Python та PyQt

Якщо ваш код не запускається, то використайте наступний код(або перевірте і знайдіть різницю): 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_())
Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 6.2K
Приєднався: 7 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація