PyQT之QWebEngineView与JS交互

GithubWEB编辑器的项目很丰富,也都做的很好,于是想利用PyQT5的QWebEngineView来嵌入自己喜欢的WEB编辑器打造自己的编辑器,因为CSS和JS来实现样式和定义一些事件动作很灵活也很漂亮。

以下是PYQT与JS交互的核心代码:

class EditorOper(object):
    def __init__(self, parent =None):
        self.kContent = KContentOper()
        self.parent = parent
        self.currentItemId = 0
        self.popupMenu = None
        self.noteDir = os.path.join(os.path.abspath('.'), 'note')
        self.statusBar = self.parent.parent().parent().statBar

    def loadContent(self, treeItem):
        self.parent.setEnabled(True)
        self.clearContent()
        itemTreePath = treeItem.getItemTreePath()
        if treeItem.childCount() > 0:
            itemTreePath += '/.desc'
        self.filePath = self.noteDir + itemTreePath.replace('/', '\\')
        try:
            with open(self.filePath, 'r', encoding = 'utf8') as f:
                content = f.read()
            self.renderContent(content)
        except Exception as e:
            self.statusBar.showMessage(e.args[1])
            self.clearContent()

    def saveContent(self, treeItem):    
        self.parent.page().runJavaScript('''document.querySelector('[data-toggle="pen"]').innerHTML''', lambda x: self.writeToFsys(x))


    def renderContent(self, content, type='NORMAL'):
        if type == 'WARNNING':
            content = "<b>" + content + "</b>"
        print(content)
        jsStr = '''document.querySelector('[data-toggle="pen"]').innerHTML=decodeURIComponent("%s")''' % (content, )
        self.parent.page().runJavaScript(jsStr)
        self.statusBar.showMessage("加载成功")

    def clearContent(self):
        self.parent.page().runJavaScript('''document.querySelector('[data-toggle="pen"]').innerHTML=""''')    

    def writeToFsys(self, content):
        fileDir = '\\'.join(self.filePath.split('\\')[:-1])
        if not os.path.exists(fileDir):
            os.makedirs(fileDir)

        contentPro = ContentProcess(content, fileDir)
        content = contentPro.imgLocal()
        content = parse.quote(content)


        try:
            with open(self.filePath, 'w+', encoding = 'utf8') as f:
                f.write(content)

            self.statusBar.showMessage("保存成功")
        except Exception as e:
            print(e)
            self.statusBar.showMessage(e.args[1])

runJavaScript的回调功能对于爬虫还是很有帮助的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值