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)
未完待续