您的位置:首页 > 编程语言 > Qt开发

关于pyqt Qwebkit+html+js 的总结

2014-09-02 13:11 253 查看
在通过pyqt的Qwebkit+html+js开发桌面程序的时候,很头疼的就是怎么样通过js来调用python代码,

js是通过Object对象来调用python代码的,需要声明一个Qobject 的子类,里面的方法使用pyqtSignature装饰器修饰

self.page().mainFrame().javaScriptWindowObjectCleared.connect(setAddtojs) ##js调用python

def setAddtojs():

self.page().mainFrame().addToJavaScriptWindowObject(QString('mOBJ'), mOBJ)

这样 mOBJ就成了window的一个属性, window.mOBJ.func,func是我们声明Qobject子类的对象里的方法

还有我们在页面里使用ajax获取数据的时候,不能正常获取数据,这就要对webview进行设置,

webview.settings().setAttribute(QWebSettings.LocalContentCanAccessRemoteUrls, True)

下面两句是利用html5的本地存储功能来帮助我们存储程序运行中要保存的数据

webview.settings().setAttribute(QWebSettings.LocalStorageEnabled, True) #开始本地存储
webview.settings().setLocalStoragePath("html/") #存储的路径
如何存储cookie呢,并且利用cookie
webview.page().networkAccessManager().setCookieJar(QNetworkCookieJar(self))
for cookie in app.mcookiejar.allCookies():

print cookie.name()

name是setCooke(name, val)中的name,在请求时候,可以将cookie放在header中发出请求

设置窗体无边框, setWindowFlags(Qt.FramelessWindowHint)

在设置成无边框了,就无法拖动了,实现拖动就是通过 js 计算出鼠标移动的距离,然后设置窗体的moveTo方法,实现拖动

学习osc 客户端 ,源码在http://git.oschina.net/fantsme/oschina-for-pc

下面是我总结的简单的例子

from PyQt4.QtCore import *

from PyQt4.QtGui import *

from PyQt4.QtWebKit import *

class BrowserScreen(QWebView):

def __init__(self):

QWebView.__init__(self)

self.resize(800, 600)

self.setUrl(QUrl('views/window.html'))

self.show()

''''

以下是对webview的属性设置,第一个是设置访问远程url,当使用ajax请求的时候,这个就派上用上

'''

self.webview.settings().setAttribute(QWebSettings.LocalContentCanAccessRemoteUrls, True)

self.webview.settings().setAttribute(QWebSettings.LocalStorageEnabled, True)

self.webview.settings().setLocalStoragePath("html/")

self.webview.page().networkAccessManager().setCookieJar(QNetworkCookieJar(self))

mOBJ = AdamOBJ()

# self.page().mainFrame().evaluateJavaScript(QString('alert("hello wolrd")')) ##python调用js

self.page().mainFrame().javaScriptWindowObjectCleared.connect(lambda: self.page().mainFrame().addToJavaScriptWindowObject(QString('mOBJ'), mOBJ)) ##js调用python

class AdamOBJ(QObject):

@pyqtSignature("QString")

def echo(self, strVal):

print strVal

if __name__ == '__main__':

import sys

app = QApplication(sys.argv)

browser = BrowserScreen()

sys.exit(app.exec_())

在html页面里面要这样调用

window.mOBJ.echo("hello world")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: