如何从应用程序向PyQtWebkitView javascript发出信号?

时间:2014-02-11 09:54:24

标签: javascript python-3.x javascript-events pyqt pyqt5

我希望从主窗口内部向WebView发出信号。

这个包含javascript来接收事件,加载并在其中插入一些html内容。

我发现此文档http://developer.nokia.com/community/wiki/Connecting_to_a_QObjects_signal_with_JavaScript_slot_in_Qt_WebKit解释了如何插入javascript部分。但我不明白它与应用程序的连接位置和方式,以及我如何做到这一点。

我没有发布任何代码,因为整体环境非常复杂,我只是想通过'< | input type ='从webview开始一项任务。按钮'>'结果太长,无法立即计算和显示。

我想把一些加载内容等待接收实际内容,然后弹出它。

1 个答案:

答案 0 :(得分:2)

这是一个非常好的问题,我被困在一段时间了!我将向您展示双向通信的示例:从python到javascript,反之亦然,希望它有所帮助:

import PyQt4.QtGui as gui, PyQt4.QtWebKit as web, PyQt4.QtCore as core

class MyMainWindow(gui.QMainWindow):    

    proccessFinished = core.pyqtSignal()

    def __init__(self, parent=None):
        super(MyMainWindow,self).__init__()

        self.wv = web.QWebView()
        self.setCentralWidget(self.wv)

        #pass this main window to javascrip
        self.wv.page().mainFrame().addToJavaScriptWindowObject("mw", self)          

        self.wv.setHtml("""
        <html>
        <head>
            <script language="JavaScript">
                function p() {
                    document.write('Process Finished') 
                }
                mw.proccessFinished.connect(p)                
            </script> 
        </head>
        <body>
            <h1>It works</h1>
            <input type=button value=click onClick=mw.doIt()></input>
        </body>
        </html>
        """)

    @core.pyqtSlot()
    def doIt(self):
        print('running a long process...')
        print('of course it should be on a thread...')
        print('and the signal should be emmited from there...')
        self.proccessFinished.emit()


app = gui.QApplication([])

mw = MyMainWindow()
mw.show()

app.exec_()