對於文本編輯,qt提供了很多控件
- QLineEdit:單行文本輸入,比如用戶名密碼等簡單的較短的或者具有單一特征的字符串內容輸入。使用text、settext讀寫
- QTextEdit:富文本編輯器,支持html顯示,可以用sethtml/tohtml進行html文本操作或使用,也可利用setPlainText、toPlainText進行純文本操作
- QPlainTextEdit:純文本編輯器,使用了近似於textedit的技術並做了純文本編輯的優化,並具有文章段落的概念也提供了撤銷等功能,但不支持html顯示。
- QTextBrowser:繼承於QTextEdit,僅提供顯示功能,並提供了超文本導航功能,如果不需要超文本連接只需要使用QTextEdit並設置QTextEdit::setReadOnly
上述都是顯示控件,可以確定的是富文本編輯器要用QTextEdit或者QPlainTextEdit,但是肯定不能主動撰寫html代碼或者逐個處理顯示格式實現富文本,實際上Qt提供了相關類:QTextDocument富文本文檔、QTextBlock文本快、QTextFrame框架、QTextTable表格、QTextList列表、QTextCursor指針位置、QTextXXXXFormat各種數據類型樣式。對於富文本的所有幫助請見官方文檔:Rich Text Processing
QTextEdit和QPlainTextEdit選擇:差異是QTextEdit提供了tohtml,如果想在處理完文檔,直接根據文檔生成html作為博客等內容,可以使用此類,沒有需要后者即可
注意關系:QTextDocument>QTextFrame>QTextBlock/QTextTable/QTextList前包含后
查看兩個類的api,均提供了document方法,可以返回QTextDocument指針,用於通過QTextDocument的方式操作文檔內容格式,官方范例:
Application Example這個比較簡單
Syntax Highlighter Example語法高亮的例子
Text Edit Example類似於word編輯器的例子
Calendar Example利用富文本編輯器的方式實現日歷(不建議學這個畢竟已經有現成的日歷控件,而且文檔中往往也不會插入日歷)
Order Form Example根據一些的參數設置生成報表,其實和上面的原理一樣
基本使用
import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class Calculate(QDialog): def __init__(self,parent=None): super(Calculate,self).__init__(parent) self.browser = QTextBrowser() self.browser.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.line_edit = QLineEdit('Type an expression an press Enter') self.line_edit.setFocusPolicy(Qt.StrongFocus) self.line_edit.selectAll() layout = QVBoxLayout() layout.addWidget(self.browser) layout.addWidget(self.line_edit) self.setLayout(layout) self.setWindowTitle('Calculate') self.connect(self.line_edit,SIGNAL('returnPressed ()'),self.update_ui) def update_ui(self): try: line_text = unicode(self.line_edit.text()) self.browser.append('%s = <b>%s</b>' %(line_text,eval(line_text))) except: self.browser.append('<font color=red>%s is invalid!</font>' %(line_text)) self.line_edit.selectAll() if __name__ == "__main__": app = QApplication(sys.argv) cal = Calculate() cal.show() sys.exit(app.exec_())
參考文檔:https://www.techieliang.com/2017/12/726/