Как передать сигнал javascript PyQtWebkitView из приложения?

Я хочу передать сигнал из моего главного окна в мой WebView.

Этот будет содержать javascript для получения события, загрузки и вставки в него некоторого содержимого html.

Я нашел эту документацию http://developer.nokia.com/community/wiki/Connecting_to_a_QObjects_signal_with_JavaScript_slot_in_Qt_WebKit, который объясняет, как вставить часть javascript. Но я не понимаю, где и как это связано с приложением и, следовательно, как я мог это сделать.

Я не публикую никакого кода, так как общая среда довольно сложна, я просто хочу запустить задачу из веб-просмотра с помощью '‹|input type='button'>', результат которого слишком длинный для вычисления и отображения мгновенно .

Я хотел бы разместить некоторый загрузочный контент, ожидающий получения фактического, а затем открыть его.


person cp151    schedule 11.02.2014    source источник


Ответы (1)


Это очень хороший вопрос, я застрял на нем некоторое время! Я покажу вам пример двусторонней связи: от 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_()
person Alvaro Fuentes    schedule 11.02.2014
comment
При вызове addToJavaScriptWindowObject вы передаете объект главного окна, в котором реализованы методы. Как я могу хранить методы слотов в других классах? (Мое приложение основано на плагине :)) - person cp151; 21.02.2014