文档章节

关于pyqt Qwebkit+html+js 的总结

真座山雕
 真座山雕
发布于 2014/09/02 13:11
字数 496
阅读 352
收藏 0

在通过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")


© 著作权归作者所有

共有 人打赏支持
真座山雕
粉丝 8
博文 49
码字总数 19546
作品 0
浦东
程序员
私信 提问
pyqt sqlite3 icu fts3 fts4 enabled 。全文搜索 功能

目标:windows下让pyqt测试程序支持sqlite3 icu fts3/4的全文搜索功能。 环境: windows XP pyqt 安装文件 PyQt-Py2.7-x86-gpl-4.9.6-1.exe pyqt 源码包 PyQt-win-gpl-4.9.4.zip python 版本...

kjpioo
2013/02/09
0
0
PyQt 4.10 发布,支持 QT 5.0

PyQt 4.10 发布了,该版本最主要的目的是为了支持 Qt 5.0. PyQt是Qt库的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次发布也是在1998年,但是当时它叫 PyKDE,因为开始的时候SIP...

oschina
2013/03/04
2.5K
5
PyQt 4.9.5 发布,Qt 库的 Python 版本

PyQt 4.9.5 支持 Qt 4.8.3 和 5.0.0 Beta1. PyQt是Qt库的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次发布也是在1998年,但是当时它叫 PyKDE,因为开始的时候SIP和PyQt没有分开。...

oschina
2012/10/01
1K
3
PyQt 5.0 发布,完全支持 Qt 5.0

PyQt 5.0 发布了,该版本增加对 Qt 5.0 的支持。 PyQt是Qt库的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次发布也是在1998年,但是当时它叫 PyKDE,因为开始的时候SIP和PyQt没有...

oschina
2013/06/18
6.8K
15
PyQt 4.8.5 发布

PyQt是Qt库的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次发布也是在1998年,但是当时它叫 PyKDE,因为开始的时候SIP和PyQt没有分开。PyQt是用SIP写的。PyQt遵从奇趣的许可模式,...

红薯
2011/08/11
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

Java单例模式学习记录

在项目开发中经常能遇见的设计模式就是单例模式了,而实现的方式最常见的有两种:饿汉和饱汉(懒汉)。由于日常接触较多而研究的不够深入,导致面试的时候被询问到后有点没底,这里记录一下学习...

JerryLin123
昨天
3
0
VSCODE 无法调试

VSCODE 无法调试 可以运行 可能的原因: GCC 的参数忘了加 -g

shzwork
昨天
4
0
理解去中心化 稳定币 DAI

随着摩根大通推出JPM Coin 稳定币,可以预见稳定币将成为区块链落地的一大助推器。 坦白来讲,对于一个程序员的我来讲(不懂一点专业经济和金融),理解DAI的机制,真的有一点复杂。耐心看完...

Tiny熊
昨天
4
0
5.线程实现

用于线程实现的Python模块 Python线程有时称为轻量级进程,因为线程比进程占用的内存少得多。 线程允许一次执行多个任务。 在Python中,以下两个模块在一个程序中实现线程 - _thread 模块 th...

Eappo_Geng
昨天
6
0
ServiceLoader

创建一个接口文件在resources资源目录下创建META-INF/services文件夹在services文件夹中创建文件,以接口全名命名创建接口实现类 内容me.zzp.ar.d.PostgreSQLDialectme.zzp.ar.d.Hype...

Cobbage
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部