2016-07-19 14 views
3

スクレイプデータ用のマルチスレッドを使用して複数のQWebviewを実行したい。しかし、qwebviewを使ってスレッドをどのように実装するのか分かりません。ここで私はいくつかのコードを書いています:Qwebview with python qt

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 
from PyQt4.QtNetwork import * 
from PyQt4 import QtCore, QtGui 
from lxml import etree,html 
from PyQt4.QtCore import Qt 
import sys 



class Form(QWidget): 
    def __init__(self, parent=None): 
     super(Form, self).__init__(parent) 
     self.setMouseTracking(True) 
     vbox = QVBoxLayout() 
     self.browser = QWebView() 
     self.browser.connect(self.browser,SIGNAL('loadFinished(bool)'),self.loadFinished) 
     #vbox.addWidget(self.browser) 
     self.browser.load(QtCore.QUrl("http://www.google.com")) 
     self.browser_tabs = QTabWidget()   
     self.browser_tabs.setTabPosition(QTabWidget.South) 
     b1_tab = QWidget() 
     d = QHBoxLayout() 
     d.addWidget(self.browser) 
     b1_tab.setLayout(d) 
     self.browser_tabs.addTab(b1_tab,"browser0") 
     vbox.addWidget(self.browser_tabs) 

     self.setLayout(vbox) 
    def loadFinished(self,ok): 
     print ok 


def main(): 

    app = QApplication(sys.argv) 
    ex = Form() 
    ex.show() 
    ex.setGeometry(150, 100, 1024, 770) 

    #ex.showMaximized() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

開いている複数のブラウザのタブウィジェットを使用することができます。

答えて

0

Formクラスの新しい関数を定義します。また、thread.start_new_thread(function_name、arguments())を使用します。

import thread 

class Form(QWidget): 
... 
    def addNewTab(self, newUrl, tabIndex): 
     new_browser = QWebView() 
     new_browser.connect(self.browser,SIGNAL('loadFinished(bool)'),self.loadFinished) 
     new_browser.load(QtCore.QUrl(newUrl)) 
     new_tab = QWidget() 
     d = QHBoxLayout() 
     d.addWidget(new_browser) 
     new_tab.setLayout(d) 
     self.browser_tabs.addTab(new_tab, "browser" + str(tabIndex)) 

     # Do your scraping here 

def main(): 
    app = QApplication(sys.argv) 
    ex = Form() 
    ex.show() 
    ex.setGeometry(150, 100, 1024, 770) 

    thread.start_newThread(ex.addNewTab, (someUrl1, 1)) 
    thread.start_newThread(ex.addNewTab, (someUrl2, 2)) 
    thread.start_newThread(ex.addNewTab, (someUrl3, 3)) 

    sys.exit(app.exec()) 
+0

ご回答ありがとうございます。可能であれば、完全なコードを書くことができますか? – Piyush

+0

私は十分書いたと思います。私はデータのスクレイピングについてあまり知らないので、私はその部分を書いていません。すみません、お手伝いできません。 – okorkut

+0

@okorkut。あなたのコードがうまく動作しないのではないかと心配しています。すべてのGUI操作**はメインスレッドで行わなければなりません**。 – ekhumoro