рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдореВрд▓ рдмрд╛рддреЗрдВ рдФрд░ рдХреНрдпреВрдЯреА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЕрдВрджрд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд

рдкрд░рд┐рдЪрдп



рд╢рд╛рдпрдж, рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреНрдпреВрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИред WebKit рд╡реЗрдм рдкреЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рд╕рднреА рдЕрдзрд┐рдХ рд╣реИред рдЗрддрдирд╛ рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдкрд╣рд▓реЗ рдореЗрдВ рджреВрд╕рд░реЗ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╢рд╛рдорд┐рд▓ рдерд╛, 50 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдирд╛рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рдХреНрдпреВрдЯреА рдХреЛрдб рд╕реЗ рдХрд┐рд╕реА рд╡реЗрдм рдкреЗрдЬ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред



рдЗрд╕ рд╡рд┐рд╡рд░рдг рдореЗрдВ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ PyQt (рдореИрдВрдиреЗ рд╕рдорд░рдлрд╝реАрд▓реНрдб рд╕рд┐рдЦрд╛рдпрд╛), рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рд╕реНрддрд░ рдХреЛ рд╡реИрд╕рд╛ рд╣реА рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЦрд╛рд╕рдХрд░ рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╡рд░реНрдгрди рдореЗрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, C ++ / Qt рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд╛рд╕ рднреА рдХреЛрдИ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рдЬреАрдПрдирдпреВ / рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд PyQt-4.7.3, рд╕рдВрд╕реНрдХрд░рдг Python-2.6.6-r1 рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рд╕реЗ рдЖрдкрдХреЛ рдЬреЗрдПрд╕ (рдХреНрд░реЛрдо, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдбреАрдмрдЧрд┐рдВрдЧ рдФрд░ рдЖрдкрдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ PyQt IDE рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдореИрдВ рдПрд░рд┐рдХ 4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред



рдЙрджрд╛рд╣рд░рдг 1. рд╡рд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬрд┐рд╕реЗ рд╣рдо рдореЙрдХ рдХрд░реЗрдВрдЧреЗ





# -*- coding: utf-8 -*-

from PyQt4.QtCore import *

from PyQt4.QtNetwork import *

from PyQt4.QtGui import *

from PyQt4.QtWebKit import *



class BaseBrowser(QWidget):

def __init__(self, parent = None):

super(BaseBrowser, self).__init__(parent)

self.__progress = 0

QNetworkProxyFactory.setUseSystemConfiguration(True)

self.webView = QWebView()

self.webView.load(QUrl( "http://www.yandex.ru" ))

self.connect(self.webView, SIGNAL( "loadFinished(bool)" ), self.adjustLocation)

self.connect(self.webView, SIGNAL( "titleChanged(QString)" ), self.adjustTitle)

self.connect(self.webView, SIGNAL( "loadProgress(int)" ), self.setProgress)

self.connect(self.webView, SIGNAL( "loadFinished(bool)" ), self.finishLoading)

self.locationEdit = QLineEdit()

self.locationEdit.setSizePolicy(QSizePolicy.Expanding, self.locationEdit.sizePolicy().verticalPolicy())

self.connect(self.locationEdit, SIGNAL( "returnPressed()" ), self.changeLocation)

self.goButton = QPushButton( "Go" )

self.connect(self.goButton, SIGNAL( "clicked()" ), self.changeLocation)

self.layout = QGridLayout(self)

self.layout.addWidget(self.locationEdit, 0, 0)

self.layout.addWidget(self.goButton, 0, 1)

self.layout.addWidget(self.webView, 1, 0, 1, 2)

self.setLayout(self.layout)



def adjustLocation(self):

self.locationEdit.setText(self.webView.url().toString())



def changeLocation(self):

url = self.locationEdit.text()

if url[0:7] != 'http://' :

url = 'http://' + url

self.webView.load(QUrl(url))

self.webView.setFocus()



def adjustTitle(self):

if self.__progress <= 0 or self.__progress >= 100:

self.setWindowTitle(self.webView.title())

else :

self.setWindowTitle(QString( "%1 (%2%)" ).arg(self.webView.title()).arg(self.__progress))



def setProgress(self, p):

self.__progress = p

self.adjustTitle()



def finishLoading(self):

self.__progress = 100

self.adjustTitle()



if __name__ == "__main__" :

import sys

app = QApplication(sys.argv)

prog = BaseBrowser()

prog.show()

sys.exit(app.exec_())




* This source code was highlighted with Source Code Highlighter .








рдЙрджрд╛рд╣рд░рдг рдХреЛрдб 1: pastebin.com/GVQ4dw1M



рдмреНрд░рд╛рдЙрдЬрд╝рд░ C ++ / Qt рдФрд░ PyQt рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рднрд┐рдиреНрдирддрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд▓реЗ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣рдо рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдВрдЧреЗред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЫреЛрдЯреЗ рднреА, рд▓рд┐рдЦрддреЗ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛, рдЗрд╕рдХреА рджреГрд╢реНрдпрддрд╛ рдФрд░ рд╕рд╣реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо QWebView рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдордиреЗ рдЗрд╕ рд╡рд┐рдЬреЗрдЯ рд╕реЗ рдЙрддреНрдкрдиреНрди рдорд╛рдирдХ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕реНрд▓реЙрдЯ рд╕реЗ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╡рд░реНрддрдорд╛рди SIGNAL рд╡реЗрдм рдкреЗрдЬ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ("titleChanged) (QString) "), рд▓реЛрдбрд┐рдВрдЧ SIGNAL рдХреА рдкреНрд░рдЧрддрд┐ (" рд▓реЛрдбрдкреНрд░реЛрдЧреНрд░реЗрд╕ (int) ") рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЕрдВрдд - SIGNAL (" рд▓реЛрдбрдлрд┐рдирд┐рд╢реНрдб (рдмреВрд▓) ")ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╡реЗрдм рдкреЗрдЬ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрдЬ рдПрдбреНрд░реЗрд╕ рдФрд░ рдПрдХ рдмрдЯрди рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ QlineEdit рдлрд╝реАрд▓реНрдб рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдпрд╛ рддреЛ "рдПрдВрдЯрд░" рджрдмрд╛рдХрд░ рдпрд╛ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗред

рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо "рдирдЧреНрди" рд╡реЗрдмрдХреАрдЯ рдХреЗ рдХрд╛рдо рдХреА рдЧрддрд┐ рд╕реЗ рднрдпрд╛рдирдХ рд╣реИрдВред рдЕрднреА рддрдХ рд╣рдордиреЗ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рдЙрджрд╛рд╣рд░рдг 2. DOM рдкреЗрдбрд╝ рдФрд░ Qt рд╕реЗ рдЙрдирдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ





рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, HTML рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдкрдврд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рджреЛ рд╡рд╛рдХреНрдпреЛрдВ рдореЗрдВ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдСрдлрд╝рд▓рд╛рдЗрди рд╢реЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рднреА рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХрд╛ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рддреЛ, рдХреЛрдИ рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЖрдкрдХреЛ рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдиреЛрдбреНрд╕ рдХреЗ рдкреЗрдбрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдПрдХ рддрддреНрд╡, рд╡рд┐рд╢реЗрд╖рддрд╛, рдкрд╛рда, рдЧреНрд░рд╛рдлрд┐рдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рд╣реИред рдиреЛрдбреНрд╕ рдЕрднрд┐рднрд╛рд╡рдХ-рдмрд╛рд▓ рд╕рдВрдмрдВрдзреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ (рд╣рд╛рдВ, рдпрд╣ рд▓рд╛рдЗрди рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рд╣реИ)ред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕ рдкреЗрдбрд╝ рдХреЗ рдиреЛрдбреНрд╕ рддрдХ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЕрдкрдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдХ рд╣реА yandex.ru рдкрд░ рдЬрд╛рдПрдВ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рд╣реЗрдмрд░рдлрд╝реЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ)ред рдЖрдк рд╕рд░реНрдЪ рдмрд╛рд░ рдХреЗ рдКрдкрд░ рдХрд┐рддрдиреЗ рд▓рд┐рдВрдХ рджреЗрдЦрддреЗ рд╣реИрдВ?

рд▓рд┐рдВрдХ рдХреА рд╕реВрдЪреА рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдореЗрдиреВ рдореЗрдВ рдЦреЛрд▓реЗрдВ (рдХреНрд░реЛрдо рдореЗрдВ, рдпрд╣ рд╕рдВрджрд░реНрдн рд╕реВрдЪреА рдореЗрдВ рдПрдХ "рдЪреЗрдХ рдЖрдЗрдЯрдо" рд╣реИ)ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреЗрдбрд╝ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦреЗрдВрдЧреЗред рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╕реАрдзрд╛ рдЖрдИрдбреА = "рдЯреИрдм" рд╣реИ рдФрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЪреБрдирдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

document.getElementById("tabs").





рджреЗрдЦрд┐рдП рдЗрд╕рдореЗрдВ рдХрд┐рддрдиреА рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ:

document.getElementById("tabs").rows.length





рдФрд░ рдХрд┐рддрдиреЗ рдХреЙрд▓рдо:

document.getElementById("tabs").rows(0).cells.length.





рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВред



# -*- coding: utf-8 -*-

from basebrowser import *



class SimpleJavaScript(BaseBrowser):

def __init__(self, parent = None):

super(SimpleJavaScript, self).__init__(parent)

self.jsButton = QPushButton( "ExecuteJS" )

self.connect(self.jsButton, SIGNAL( "clicked()" ), self.jsScript)

self.jsStringEdit = QLineEdit()

self.jsStringEdit.setSizePolicy(QSizePolicy.Expanding, self.jsStringEdit.sizePolicy().verticalPolicy())

self.jsStringEdit.setText( "document.getElementById(\"tabs\").rows(0).cells.length" )

self.connect(self.jsStringEdit, SIGNAL( "returnPressed()" ), self.jsScript)

self.jsReturnText = QTextEdit()

self.layout.addWidget(self.jsStringEdit, 2, 0, 1, 1)

self.layout.addWidget(self.jsButton, 2, 1, 1, 1)

self.layout.addWidget(self.jsReturnText, 3, 0, 1, 2)



def jsScript(self):

jsString = self.jsStringEdit.text()

jsReturn = self.webView.page().currentFrame().evaluateJavaScript(jsString)

self.jsReturnText.setPlainText(jsReturn.toString())



if __name__ == "__main__" :

import sys

app = QApplication(sys.argv)

ui = SimpleJavaScript()

ui.show()

sys.exit(app.exec_())




* This source code was highlighted with Source Code Highlighter .








рдЙрджрд╛рд╣рд░рдг рдХреЛрдб 2: pastebin.com/p4P1ZEtS

рддреЛ, JS рдХреЛрдб рдХреА рдЧрдгрдирд╛ рдлрдВрдХреНрд╢рди webView.page () рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред CurrentFrame ()ред EvJJavaScript (jsString) рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред

рдореВрд▓реНрдпрд╛рдВрдХрдиJavaScript (рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдпреБрдХреНрдд QString рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдПрдХ QVariant рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдбреЛрдо рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдкрд╛рда рдпрд╛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЬрд╛рдирдХрд╛рд░реА - рдХреГрдкрдпрд╛ред



рдЙрджрд╛рд╣рд░рдг 3. рдСрдлрд╝рд▓рд╛рдЗрди рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рдирд╛





рдЗрд╕ рдмрд╛рд░ рд╣реЛрдо рдкреЗрдЬ рдХрд╛ рдкрддрд╛ рдЗрд╕ рддрд░рд╣ рдЪреБрдирд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдЯреАрдЖрдИ рдХрд╛рд░реНрдб рд╣реИ рдФрд░ рдореИрдВ рд▓рд┐рдирдХреНрд╕ рдХреЗ рдиреАрдЪреЗ рдмреИрдард╛ рд╣реВрдВ, рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ, рд╡рд╣ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдкреНрдпрд╛рд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЪрдпрди рдЬреИрд╕реЗ рдкреГрд╖реНрда рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдг рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рд╕рдордХрдХреНрд╖ рдмрдирд╛рдПрдВрдЧреЗред



# -*- coding: utf-8 -*-

from basebrowser import *

from PyQt4.QtGui import *

from PyQt4.QtCore import *



class JSSelectList(QAbstractListModel):

def __init__ (self, _id, _jsFunc, parent = None):

super(JSSelectList, self).__init__(parent)

self.id = _id

self.jsFunc = _jsFunc



def data(self, index, role=Qt.DisplayRole):

if not index.isValid():

return QVariant()

if role == Qt.DisplayRole:

jsstring = QString( "document.getElementById('%1').options[%2].textContent" ).arg(self.id).arg(index.row())

jsreturn = self.jsFunc(jsstring)

return jsreturn.toString().trimmed()



def rowCount(self, index=QModelIndex()):

jsstring = QString( "document.getElementById('%1').length" ).arg(self.id)

jsreturn = self.jsFunc(jsstring)

ok = False

count, ok = jsreturn.toInt()

return count if ok else 0



def headerData(self, section, orientation, role=Qt.DisplayRole):

if role != Qt.DisplayRole:

return QVariant()

else :

return self.id



class JSComboBoxDemo(BaseBrowser):

def __init__(self, parent = None):

super(JSComboBoxDemo, self).__init__(parent)

self.vendorComboBox = QComboBox()

id = QString( "productLine" )

self.vendorListModel = JSSelectList(id, self.webView.page().currentFrame().evaluateJavaScript)

self.vendorComboBox.setModel(self.vendorListModel)

self.connect(self.vendorComboBox, SIGNAL( "currentIndexChanged(int)" ), self.setSelectOnWebPage);

self.connect(self.webView, SIGNAL( "loadFinished(bool)" ), self.initComboBox)

self.layout.addWidget(self.vendorComboBox, 2, 0, 1, 1)

self.webView.load(QUrl( "http://www.amd.com" ))



def setSelectOnWebPage(self, new_id):

jsstring = QString( "document.getElementById('productLine').selectedIndex=%1" ).arg(new_id)

self.webView.page().currentFrame().evaluateJavaScript(jsstring)



def initComboBox(self):

self.vendorComboBox.setCurrentIndex(0)



if __name__ == "__main__" :

import sys

app = QApplication(sys.argv)

ui = JSComboBoxDemo()

ui.show()

sys.exit(app.exec_())




* This source code was highlighted with Source Code Highlighter .








рдЙрджрд╛рд╣рд░рдг рдХреЛрдб 3: pastebin.com/YzA9hL3H



рдПрдХ рддрд╛рд▓рд┐рдХрд╛, рд╕реВрдЪреА, рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ GUI рддрддреНрд╡реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп (рдореИрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛) Qt рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ MVC рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдорд╛рдирдХ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (рд╕рдорд░рдлреАрд▓реНрдб рдореЗрдВ, рдпрд╣ рдЕрдзреНрдпрд╛рдп 14 рд▓рдЧрддрд╛ рд╣реИ)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, QAbstractListModel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдХреЗрд╡рд▓ JS рдирд┐рд╖реНрдкрд╛рджрди рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдкреГрд╖реНрда рдкрд░ рдЪрдпрдирд┐рдд рдирд╛рдо рдЗрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рдг рдорд╛рдирдХреЛрдВред



рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рджреЛ рд╕рд┐рдЧреНрдирд▓-рд╕реНрд▓реЙрдЯ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдмреЗрдХрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрдереНрдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВ рдХрд┐ рдЬрдм рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдП, рддреЛ QWebView рд╡рд┐рдЬреЗрдЯ рдПрдХ рд╕рдВрдХреЗрдд ("рд▓реЛрдбрдлрд┐рдирд┐рд╢реНрдб (рдмреВрд▓)") рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред



self.connect(self.webView, SIGNAL("loadFinished(bool)"), self.initComboBox)







рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдЖрдк рд▓рд╛рдЗрди рдХреЛ рдзрдХреНрдХрд╛ рджреЗрддреЗ рд╣реИрдВ



self.vendorComboBox.setCurrentIndex(0)







__init__ рдореЗрдВ рдкрд╣рд▓реЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдореВрд▓реНрдпрд╛рдВрдХрдирдЬрд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреЗрдЬ рдЕрднреА рддрдХ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

рджреВрд╕рд░реЗ, рд╣рдореЗрдВ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



self.connect(self.vendorComboBox, SIGNAL("currentIndexChanged(int)"), self.setSelectOnWebPage)







рдЗрд╕реА рддрд░рд╣, рдЖрдк рдкреГрд╖реНрда рдХреА рд▓рдЧрднрдЧ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╛рдирдХрд╛рд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рд╕рднреА рдХреЛ рдореЗрд░реА рдХреНрд░рд┐рд╕рдорд╕ рдФрд░ рдирдпрд╛ рд╕рд╛рд▓ рдореБрдмрд╛рд░рдХред



рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп:



рдЬреЗред рдмреНрд▓реИрдВрдЪреЗрдЯ, рдПрдоред рд╕рдорд░рдлрд╝реАрд▓реНрдбред Qt 4: C ++ GUI рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред

рд╕рдорд░рдлреАрд▓реНрдб рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред рдкрд╛рдпрдерди рдФрд░ рдХреНрдпреВрдЯреА рдХреЗ рд╕рд╛рде рд░реИрдкрд┐рдб рдЬреАрдпреВрдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред

рдЕрдиреНрдп рд╕реНрд░реЛрдд:

Arora рдЗрдВрдЯрд░рдиреЗрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ PyQt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рд╛рдЗрдЯреЗрдВред



All Articles