2014-04-19 26 views
1
import sys 
from PySide import QtGui, QtWebKit, QtCore 

class WebPageProcessor(object): 

    def __init__(self, browser): 
     self.browser = browser 
     self.browser.loadFinished.connect(self.test) 
     self.browser.load('http://google.com') 

    def test(self, ok): 
     print(ok) 


class Browser(QtGui.QWidget): 

    def __init__(self): 
     super().__init__() 
     self.init_ui() 
     bot = WebPageProcessor(self.browser) 

    def init_ui(self): 
     self.browser = QtWebKit.QWebView() 

     grid = QtGui.QGridLayout() 
     grid.setContentsMargins(0, 0, 0, 0) 
     grid.addWidget(self.browser, 0, 0) 
     self.setLayout(grid) 


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    browser = Browser() 
    browser.show() 
    app.exec_() 

'瀏覽器'類是UI瀏覽器,'WebPageProcessor'是控制它的類。PySide,QtWebKit - loadFinished信號永遠不會發射

我已將'loadFinished'信號綁定到瀏覽器,但它從未被稱爲

如果我從'WebPageProcessor'類中退出,並將其所有代碼放入'init_ui'方法中,則信號正確發出。

是什麼原因以及如何解決?

回答

1

loadFinished肯定是散發出來的。但test插槽永遠不會被調用,因爲它在連接後立即被刪除。這是因爲您允許WebPageProcessor的實例在__init__返回時被垃圾收集。

試試這個:

self.bot = WebPageProcessor(self.browser)