PyQt5 - QTextEdit
參考資料:https://doc.qt.io/qt-5/qtextedit.html#details
QTextEdit類提供了一個控件來編輯和瀏覽純文本和富文本。
from PyQt5.QtWidgets import QMainWindow, QApplication, QTextEdit import sys class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.te1 = QTextEdit(self) self.te1.setGeometry(10, 10, 300, 300) ''' write something down here ''' self.setGeometry(0, 0, 320, 320) self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
1. acceptRichText和setAcceptRichText()
此屬性用來指定文本框是否接受富文本輸入。當設置為false時,文本框只接受純文本,比如通過鍵盤輸入或拖拽。默認情況為true。
print(self.te1.acceptRichText()) # True self.te1.setAcceptRichText(True)
2. autoFormatting
此屬性用來指定是否自動進行格式化。有效值可以為AutoFormattingFlag中各值的組合。默認值為AutoNone。選擇AutoAll可以自動進行各類的格式化。目前,只有一種格式化方式可實現,即AutoBulletList。
AutoNone為不進行任何方式的格式化
AutoBulletList為自動生成列表(例如,在最左側輸入*號時,或者在已經存在的列表結尾回車時)
AutoAll為自動進行全部類型的格式化
# AutoNone = 0 # AutoBulletList = 0x00000001 # AutoAll = 0xffffffff print(self.te1.autoFormatting()) self.te1.setAutoFormatting(QTextEdit.AutoAll)
3. cursorWidth() & setCursorWidth()
用來指定光標的寬度,默認值是1px
print(self.te1.cursorWidth()) # 1 self.te1.setCursorWidth(10)
4. document() & setDocument()
5. documentTitle() & setDocumentTitle()
保存從文檔文本解析出的文檔題目,默認的,對於一個新建的空文檔,這個屬性是空字符串。
print(self.te1.documentTitle()) # self.te1.setDocumentTitle('XXX')
6. toHtml() & setHtml()
提供了文本到html的接口。toHtml()返回一段文本的html形式。setHml()將改變文本,之前所有的文本均被刪除,撤銷與恢復的歷史也被清除。輸入的文本將被解釋為html格式的富文本。除非textCursor()返回的光標位置已在文檔的開始處,否則,currentCharFormat()也將被重置。
注意:當一個包含HTML的QString對象被創建並傳遞到setHTML()時,調用者需要確保文本已被正確解碼。
默認情況下,對於一個新建的空文檔,toHtml()將返回一個body中沒有內容的Html 4.0版本的文檔(有head和一個簡單的css,文本格式主要以html方式定義)。
print(self.te1.toHtml()) ''' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> ''' self.te1.setHtml('<a target=_blank href="https://www.cnblogs.com/">cnblog</a>') # cnblog
7. lineWrapMode()和setLineWrapMode()
用來指定換行模式,默認模式是WidgetWidth,即超出文本框右側的文本將在空格處被換行,以保證詞的完整性。如果想要在單詞中間換行,需調用setWordWrapMode()方法。如果設置了FixedPixelWidth或FixedColumnWidth模式,則需要同時調用setLineWrapColumnOrWidth()方法來指定寬度。
# QTextEdit.NoWrap = 0 # QTextEdit.WidgetWidth = 1 # QTextEdit.FixedPixelWidth = 2 # QTextEdit.FixedColumnWidth = 3 print(self.te1.lineWrapMode()) # 1 self.te1.setLineWrapMode(0) self.te1.setLineWrapMode(QTextEdit.NoWrap)
8. lineWrapColumnOrWidth() & setLineWrapColumnOrWidth()
決定文本的換行位置。若換行模式為FixedPixelWidth,則超過輸入像素值的文字被換行。若換行模式為FixedColumnWidth,則超過輸入的字符數后的文字被換行。
self.te1.setText('This property holds the position (in pixels or columns depending on the wrap mode) where text will be wrapped.') print(self.te1.lineWrapColumnOrWidth()) # 0 self.te1.setLineWrapMode(QTextEdit.FixedPixelWidth) self.te1.setLineWrapColumnOrWidth(200) ''' This property holds the position (in pixels or columns depending on the wrap mode) where text will be wrapped. ''' self.te1.setLineWrapMode(QTextEdit.FixedColumnWidth) self.te1.setLineWrapColumnOrWidth(30) ''' This property holds the positi on (in pixels or columns depen ding on the wrap mode) where t ext will be wrapped. '''
9. overwriteMode()和setOverwriteMode()
用來決定輸入的文本是否會改寫已經存在的文本,相當於按下鍵盤上insert后以切換插入或改寫模式。若設置為true,則新輸入的文本將逐字的替換已有的文本。若設置為false,則新輸入的文本將在光標處插入,使已有文本后移。默認值是false,即不改寫已有文本。
print(self.te1.overwriteMode()) # False self.te1.setOverwriteMode(True)
10. placeholderText()和setPlaceholderText()
用來決定占位文本,即沒有輸入時,顯示的一段提示字符串。設置此屬性后,當document()為空時,文本框會顯示一串灰色的字符串。默認情況下,此屬性為空字符串。
print(self.te1.placeholderText()) # self.te1.setPlaceholderText('write something down here')
11. toPlainText()和setPlainText()
用來獲取或設置文本框的內容為純文本。設置后,已存在的文本將被清除,撤銷與恢復的歷史也被清除。除非textCursor()返回的光標已在文檔的開始處,否則,currentCharFormat()也將被重置。
如果文本框內含有其他類型的內容,當你調用toPlainText()方法時,它們不會被替換為純文本。唯一的例外是nbsp;,它將被轉換為空格。
默認情況下,對於沒有內容的文本框,此屬性是空字符串。
self.te1.setHtml('<a target=_blank href="https://www.cnblogs.com/">cnblog</a>') # cnblog print(self.te1.toPlainText()) # cnblog self.te1.setPlainText('<a target=_blank href="https://www.cnblogs.com/">cnblog</a>') # <a target=_blank href="https://www.cnblogs.com/">cnblog</a>
12. isReadOnly()和setReadOnly()
用來指定文本是否只讀,設置為只讀后,文本只能被選擇,不能被編輯。默認為false。
print(self.te1.isReadOnly()) # False self.te1.setReadOnly(True)
13. tabChangesFocus()和setTabChangesFocus()
此屬性用來指定tab鍵是切換焦點,還是作為輸入。默認為false。設置為true后,若存在其他控件,則按tab鍵后,焦點將會切換到另一個控件,若不存在其他控件,tab還是作為輸入。
print(self.te1.tabChangesFocus()) # False self.te1.setTabChangesFocus(True)
14. tabStopDistance()和setTabStopDistance()
此屬性用來指定tab鍵對應的像素值,默認為80px。
print(self.te1.tabStopDistance()) # 80 print(type(self.te1.tabStopDistance())) # <class 'float'> self.te1.setTabStopDistance(50)
15. textInteractionFlags()和setTextInteractionFlags()
此屬性用來指定控件如何響應用戶輸入。默認值取決於控件是否只讀,以及是不是QTextBrowser。
(此處補:flag對應值和意義)
from PyQt5.QtCore import Qt print(self.te1.textInteractionFlags()) # <PyQt5.QtCore.Qt.TextInteractionFlags object at 0x032A69B0> self.te1.setTextInteractionFlags(Qt.TextSelectableByMouse)
16. isUndoRedoEnabled()和setUndoRedoEnabled()
此屬性用來指定撤銷(ctrl+z)和恢復(ctrl+y)功能是否可用。
print(self.te1.isUndoRedoEnabled()) # True self.te1.setUndoRedoEnabled(False)
17. wordWrapMode()和setWordWrapMode()
此屬性用來指定是否在單詞中間換行,默認值為QTextOption.WrapAtWordBoundaryOrAnywhere。
from PyQt5.QtGui import QTextOption print(self.te1.wordWrapMode()) # 4 self.te1.setWordWrapMode(QTextOption.NoWrap)
未完待續