2016-07-19 3 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