QTextEdit

余生颓废 提交于 2019-12-02 13:53:26

 

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)

未完待续

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!