【问题标题】:How to emit signal to a PyQtWebkitView javascript from the Application?如何从应用程序向 PyQtWebkitView javascript 发出信号?
【发布时间】:2014-02-11 09:54:23
【问题描述】:

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

这个将包含用于接收事件、加载和插入一些 html 内容的 javascript。

我找到了这个文档http://developer.nokia.com/community/wiki/Connecting_to_a_QObjects_signal_with_JavaScript_slot_in_Qt_WebKit,它解释了如何插入 Javascript 部分。但我不明白它在哪里以及如何连接到应用程序,因此我不明白我该怎么做。

我没有发布任何代码,因为整体环境非常复杂,我只是想从 web 视图中使用 '' 开始一个任务,结果太长而无法计算并立即显示。

我想放一些加载内容等待接收实际的然后弹出。

【问题讨论】:

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


    【解决方案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_()
    

    【讨论】:

    • 调用 addToJavaScriptWindowObject 时,您传递的是已实现方法的主窗口对象。如何将插槽方法存储在其他类中? (我的应用程序是基于插件的:))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多