隨筆 - 67  文章 - 79  trackbacks - 0
          <2008年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          這篇是為了做Rss項目而研究WebKit后的副產品,但是它的意義遠大于離線Rss閱讀

          這是另一個RichEdit 并且編輯起來更容易
          而且它很容易轉換到B/S結構,不管需求是環肥燕瘦都能適應......

          估計這是最簡單的一種 xml文檔、html預覽、RichEdit 三位一體的方案了......

          代碼:
          import sys,locale
          encoding
          =locale.getdefaultlocale()[1]
          from PyQt4 import Qt
          from PyQt4 import QtCore
          from PyQt4 import QtGui
          from PyQt4 import QtWebKit

          html
          =r'''<html>
          <head></head>
          <body>
          <script>
          function onChanged(e,id) { 
          var element =document.getElementById(id);
          python.onChanged(id,element.textContent); 
          }
          </script>
          <div id="main">
          <h1 id="title"" contenteditable="true" onkeyup="onChanged(event,'title')">T1</h1>
          <div id='body'>
          <p id='body_line1' contenteditable="true" onkeyup="onChanged(event,'body_line1')">123456</p>
          <p id='body_line2' contenteditable="true" onkeyup="onChanged(event,'body_line2')">abdcdef</p>
          </div>
          </div>
          <body>
          </html>
          '''

          class PythonJS(QtCore.QObject):
              
              
          __pyqtSignals__ = ("contentChanged(const QString &,const QString &)")
              
              @QtCore.pyqtSignature(
          "QString,QString")
              
          def onChanged(self, id,msg):
                  self.emit(QtCore.SIGNAL(
          'contentChanged(const QString &,const QString &)'),id, msg)

              @QtCore.pyqtSignature(
          "", result="QString")
              
          def message(self): 
                  
          return "Message!"


          class MainWindow(QtGui.QMainWindow):
              
          def __init__(self):
                  super(MainWindow,self).
          __init__()
                  self.update
          =True
                  
                  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.html
          =html
                  self.edit.setPlainText(self.html)
                  
                  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)
                  
                  self.browser.setHtml(self.html)
                  
              
          def onJSMessage(self,id,msg):
                  
                  self.html
          = self.browser.page().mainFrame ().toHtml()
                  
          #print unicode(self.html).encode(encoding)
                  self.setEditText(self.html)
                  
              
          def resizeEvent(self,s):
                  size
          =self.size()
                  self.tabs.resize(size)

              
          def setEditText(self,str,update=False):
                  t
          =self.update
                  self.update
          =update
                  self.edit.setPlainText(str)
                  self.update
          =t
                  
                      
              
          def onTextChanged(self):
                  
          if self.update:
                      self.html
          = self.edit.toPlainText() 
                      self.browser.setHtml(self.html)
                      self.browser.page().mainFrame().addToJavaScriptWindowObject(
          'python',self.pjs) 
                      self.browser.reload()
                      
              
          def onObjectClear(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_())       
                  



          posted on 2008-07-30 15:55 zarra 閱讀(1351) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 阿拉善左旗| 庆云县| 阿拉尔市| 长寿区| 岳普湖县| 宁陕县| 大兴区| 沙坪坝区| 鹿泉市| 顺昌县| 日照市| 凌云县| 普兰县| 镇雄县| 航空| 宜川县| 通江县| 乐昌市| 诸暨市| 林甸县| 宁武县| 镇沅| 清新县| 涟源市| 开鲁县| 防城港市| 长兴县| 湄潭县| 兰西县| 夏邑县| 隆德县| 哈密市| 韶山市| 海淀区| 柳州市| 靖边县| 亳州市| 甘孜县| 康乐县| 土默特左旗| 镇宁|