关于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")
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")
相关文章推荐
- 关于html ,css, js 的总结
- paip.关于动画特效原理 html js 框架总结
- 关于MFC中CDHtmlDialog嵌入flash和调用JS一些技术总结
- paip.关于动画特效原理 html js 框架总结
- 关于html,servlet、css、js一些总结
- paip.关于动画效果的原则 html js 框架总结
- 关于HTML/JSP文件中JS文件和CSS文件的导入顺序
- 总结关于iPhone中UIWEBVIEW读取本地GBK编码格式html
- 关于对js从服务器端取到的值进行函数调用的总结
- js html对象通用属性总结
- 关于Jquery中ajax方法data参数用法的总结http://www.cnblogs.com/tim190/archive/2010/10/20/1856523.html
- 关于分页 HTML 代码中的 Js 函数指定问题( 编号:20110705A0847 )
- Gaia项目总结(3)HTML与JS设置
- 技术总结:关于JS执行前台和后台顺序的.另外一个是前后和后台变量的交互的.
- JS中关于把函数作为另一函数的参数的几点小总结
- 关于js中的冒泡事件和html默认事件解决方案
- 关于js正则表达式g,i,m 参数的总结
- JS动态创建HTML总结
- html中select在js中的操作(再总结一下)
- 关于.NET TextBox 前台JS赋值 后台得不到值的处理方法总结