pyqt给js赋值,获取form表单值

帮同事写客户端,发现pyqt和wxpython的api何其的多,资料又少,写一个包含各种表单的客户端对我来说难度很大,于是想到使用webkit来渲染html,pyqt自然成了我的选择。

但是发现,平时在web开发中,html向web后台获取数据或者提交数据这样简单的事,在pyqt中我完全不知道怎么办,资料又各种少。

最后找到了对应的简单例子,但是获取表单数据的那个例子在怎么都不起作用(google翻来覆去的查都只有那个例子),正在要放弃的时候,又突然能用了,感觉醉了。由于pyqt完全不懂,用它也只是为了写个东西出来,所以不打算深究,既然能用了,就这样吧。。


下面是整合了的代码:

import sys
from PyQt4 import QtCore, QtGui, QtWebKit
import json
from urllib import unquote_plus

class StupidClass(QtCore.QObject):

    def _pyVersion(self):
        return json.dumps(sys.version)

    pyVersion = QtCore.pyqtProperty(str, fget=_pyVersion)


class MyWebPage(QtWebKit.QWebPage):
    formSubmitted = QtCore.pyqtSignal(QtCore.QUrl)

    def acceptNavigationRequest(self, frame, req, nav_type):
        if nav_type == QtWebKit.QWebPage.NavigationTypeFormSubmitted:
            print 111
            self.formSubmitted.emit(req.url())
        return super(MyWebPage, self).acceptNavigationRequest(frame, req, nav_type)


def handleFormSubmitted(url):
        elements = {}
        for key, value in url.encodedQueryItems():
            key = unquote_plus(bytes(key)).decode('utf8')
            value = unquote_plus(bytes(value)).decode('utf8')
            elements[key] = value
        for item in elements.iteritems():
            print '"%s" = "%s"' % item

def main():
    app = QtGui.QApplication(sys.argv)

    myObj = StupidClass()

    browser= QtWebKit.QWebView()
    browser.setPage(MyWebPage())
    browser.page().mainFrame().addToJavaScriptWindowObject("pyObj", myObj)
    browser.page().formSubmitted.connect(handleFormSubmitted)
    browser.load(QtCore.QUrl("./StreamBlock.html"))

    window = QtGui.QMainWindow()
    window.setCentralWidget(browser)
    window.show()

    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
StreamBlock.html内容:




    
    Document
    
    
    



在这个例子里只能用page().load(),不能用page().setHtml()。form表单数据获取不到,没有深究,感兴趣的可以研究下。

可以看到,这个例子里面,python把数据传给了js,同时也能获取html form表单的数据。

心好累,不过终于能愉快的写html/css/js了。


续:最后时间有限,没时间研究web和pyqt交互,所以就直接启动了一个django,把它弄成守护进程,如果启动客户端的时候这个守护进程没有起来就手动起一下


本人出于个人兴趣,创建了一个个人公众号,每天筛选国外网友发现的有趣的事情推送到公众号,欢迎关注!

pyqt给js赋值,获取form表单值_第1张图片


你可能感兴趣的:(python)