Въпреки че ежедневно се занимавам с компютри и съм свикнал с бурното развитие на технологииите, все още има неща в бранша, които ме смайват. Ето например последната версия на библиотеката за програмиране QT 4.4 (произнася се като англииското “cute” – приятен). Едно от новите въведения е реализирането на WebKit – модулен интернет браузър (е не мога да се насиля преведа тая дума като “четец” и това си е!). Още след като бяха пуснати библиотеките PyQT за връзка между Python и Qt 4.4 започнах да се човъркам из кода и за по-малко от два часа (толкова ми отпусна Жорката докато спеше обедния си сън) успях да спретна един много елементарен браузер. Само за сравнение – новата версия на Firefox 3 отне повече от година и половина. Естествено няма място за сравнение на няколко набързо нахвърлени реда код и гигантското постижение което е новия Firefox, но все пак дава перспектива.
Ето как изглежда програмката в действие:
А по-долу е кода на главната програма (webkit_test.py) и на визуалната част (т.нар. GUI – Graphical User Interface) – (Ui_webkit_test.py). Графиния интерфейс е проектиран с QtDesigner а за редактор съм използал Eric4. За сваляне на кода – ето на този адрес: http://toshe.bukov.com/download/toshe_bukov_pyqt_4.4_webkit_example_ver._0.6.zip.
webkit_test.py
# -*- coding: utf-8 -*-
# Author: Toshe Bukov (toshe[at]bukov[dot]com)
# Licence: GNU GPL version 3 or later (http://www.gnu.org/licenses/gpl-3.0.html)
#
# This example can be seen at http://toshe.bukov.com/blog/index.php/post/2008/05/26/130
#
"""
Module implementing MainWindow.
"""
import sys
from PyQt4 import QtGui, QtCore, QtWebKit
from PyQt4.QtGui import QMainWindow
from PyQt4.QtCore import pyqtSignature
from Ui_webkit_test import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
"""
This class implements the container window that consists of address bar, button and
web page renderer.
"""
def __init__(self, parent = None):
"""
Class constructor.
"""
QMainWindow.__init__(self, parent)
self.setupUi(self)
self.loadingURL = ""
#self.setWindowTitle("PyQt4.4 WebKit browser demo")
@pyqtSignature("")
def on_urlBar_returnPressed(self):
"""
This method is invoked when Enter/Return keyboard key is pressed.
"""
urlText = str(self.urlBar.text()).lower()
if not urlText.startswith("http://"):
urlText = "http://" + urlText
self.loadingURL = urlText
urlAddress = QtCore.QUrl(urlText)
self.webView.load(urlAddress)
@pyqtSignature("")
def on_goButton_clicked(self):
"""
This method is invoked when "Go" button is clicked.
"""
self.on_urlBar_returnPressed()
@pyqtSignature("")
def on_webView_loadStarted(self):
"""
QT invokes this method when page is being loaded in WebKit widget.
"""
self.statusbar.showMessage("Loading " + self.loadingURL)
@pyqtSignature("bool")
def on_webView_loadFinished(self, p0):
"""
This method is invoked when page load is complete.
"""
self.statusbar.showMessage("Done. (" + self.webView.url().toString() + ")")
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
Ui_webkit_test.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'webkit_test.ui'
#
# Created: Mon May 26 15:53:38 2008
# by: PyQt4 UI code generator 4.4.2
#
# Author: Toshe Bukov (toshe[at]bukov[dot]com)
# Licence: GNU GPL version 3 or later (http://www.gnu.org/licenses/gpl-3.0.html)
#
# This example can be seen at http://toshe.bukov.com/blog/index.php/post/2008/05/26/130
#
from PyQt4 import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800,600)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setGeometry(QtCore.QRect(0,27,800,548))
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.urlBar = QtGui.QLineEdit(self.centralwidget)
self.urlBar.setObjectName("urlBar")
self.horizontalLayout.addWidget(self.urlBar)
self.goButton = QtGui.QPushButton(self.centralwidget)
self.goButton.setObjectName("goButton")
self.horizontalLayout.addWidget(self.goButton)
self.verticalLayout.addLayout(self.horizontalLayout)
self.webView = QtWebKit.QWebView(self.centralwidget)
self.webView.setUrl(QtCore.QUrl("about:blank"))
self.webView.setObjectName("webView")
self.verticalLayout.addWidget(self.webView)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0,0,800,27))
self.menubar.setObjectName("menubar")
self.menuFile = QtGui.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setGeometry(QtCore.QRect(0,575,800,25))
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionExit = QtGui.QAction(MainWindow)
self.actionExit.setObjectName("actionExit")
self.menuFile.addAction(self.actionExit)
self.menubar.addAction(self.menuFile.menuAction())
self.retranslateUi(MainWindow)
QtCore.QObject.connect(self.actionExit,QtCore.SIGNAL("triggered()"),MainWindow.close)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "Python QT4.4 Webkit test", None, QtGui.QApplication.UnicodeUTF8))
self.goButton.setText(QtGui.QApplication.translate("MainWindow", "Go", None, QtGui.QApplication.UnicodeUTF8))
self.menuFile.setTitle(QtGui.QApplication.translate("MainWindow", "File", None, QtGui.QApplication.UnicodeUTF8))
self.actionExit.setText(QtGui.QApplication.translate("MainWindow", "Exit", None, QtGui.QApplication.UnicodeUTF8))
# -- uncomment below code to test the GUI code
#from PyQt4 import QtWebKit
#
#if __name__ == "__main__":
# import sys
# app = QtGui.QApplication(sys.argv)
# MainWindow = QtGui.QMainWindow()
# ui = Ui_MainWindow()
# ui.setupUi(MainWindow)
# MainWindow.show()
# sys.exit(app.exec_())
Здравей,
много бих искал някои да ми обясни някои неща в QT.Абсолютен лаик съм в програмирането на C++.От многото четене разбрах, че се събкалсва основният клас като се модифицира.Искам да направя една елементарна апликаця: три полета QLineEdit, каквото число напишем в първото да се умножава, събира или дели с второто и резултата да се показва в третото.Това би ми помогнало да видя къде и как се пишат Сигналите и слотовете както и мембър функциите.
Благодаря