QT使用xsl将xml为html,使用Webkit和xml、xslt 实现html风格的RichEdit试验

importsys,localefromlxmlimportetreefromPyQt4importQtfromPyQt4importQtCorefromPyQt4importQtGuifromPyQt4importQtWebKitimportxml_utils

encoding=locale.getdefaultlocale()[1]classPythonJS(QtCore.QObject):__pyqtSignals__=("contentChanged(const QString &,const QString &)")

@QtCore.pyqtSignature("QString,QString")defonChanged(self, id,msg):#print msg,idself.emit(QtCore.SIGNAL('contentChanged(const QString &,const QString &)'),id, msg)

@QtCore.pyqtSignature("", result="QString")defmessage(self):return"Message!"classMainWindow(QtGui.QMainWindow):def__init__(self):

super(MainWindow,self).__init__()

self.update=True

self.xml=etree.parse('template.xml')

self.tabs=QtGui.QTabWidget(self)

self.browser=QtWebKit.QWebView(self.tabs)

self.edit=QtGui.QPlainTextEdit(self.tabs)

self.tabs.addTab(self.browser,'View')

self.tabs.addTab(self.edit,'Edit')

self.edit.setPlainText(etree.tostring(self.xml,pretty_print=True))

self.pjs=PythonJS()

self.connect(self.edit,QtCore.SIGNAL('textChanged()'),self.onTextChanged)

self.connect(self.pjs,QtCore.SIGNAL('contentChanged(const QString &,const QString &)'),self.onJSMessage)

self.connect(self.browser.page().mainFrame(),QtCore.SIGNAL('javaScriptWindowObjectCleared ()'),self.onObjectClear)

html=xml_utils.XSLTransform(self.xml,'richedit.xsl')

self.browser.setHtml(unicode(html))defonJSMessage(self,id,msg):

self.html=self.browser.page().mainFrame ().toHtml()#print unicode(self.html).encode(encoding)self.setEditText(id,msg)defresizeEvent(self,s):

size=self.size()

self.tabs.resize(size)defsetEditText(self,id,str,update=False):

t=self.update

self.update=update

e=xml_utils.getElementById(self.xml, id)

e.text=unicode(str)

self.edit.setPlainText(etree.tostring(self.xml,pretty_print=True))

self.update=tdefonTextChanged(self):ifself.update:try:

self.xml=etree.fromstring(unicode(self.edit.toPlainText()) )try:

html=xml_utils.XSLTransform(self.xml,'richedit.xsl')

html=unicode(html)ifhtml:

self.browser.setHtml(html)

self.browser.page().mainFrame().addToJavaScriptWindowObject('python',self.pjs)

self.browser.reload()exceptException,e:printeexceptException,e:printedefonObjectClear(self):

self.browser.page().mainFrame().addToJavaScriptWindowObject('python',self.pjs)if__name__=='__main__':

app=QtGui.QApplication(sys.argv)

frame=MainWindow()

frame.show()

sys.exit(app.exec_())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值