09. 文本框控件

一、文本框控件

  图形界面上需要输入信息,与程序进行沟通,输入数据信息的控件有单行文本控件、多行文本控件等。

  我们可以在终端中使用 pip 安装 PySide6 模块。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载

pip install pyside6 -i https://mirrors.aliyun.com/pypi/simple

  国内常用的 pip 下载源列表:

二、单行文本框控件

  QLineEdit 控件是 单行文本编辑器,用于接收用户输入的字符串数据,并显示字符串数据,输入的整数和浮点数也会当作字符串数据。可以利用 int()float() 函数将字符串型整数和浮点数转换成整数和浮点数。

  用 QLineEdit 类创建实例对象的方法如下:

QLineEdit(parent:QWidget=None)
QLineEdit(text:str, parent:QWidget=None)

  其中 parent窗口 或者 容器类控件textQLineEdit显示的本文

  QLineEdit 控件可以用于密码输入,可以进行复制、粘贴、删除等操作。它的常用方法如下:

# 实例方法
insert(text:str) -> None                                                        # 在光标处插入文本

text() -> str                                                                   # 获取真实文本,而不是显示文本
displayText() -> str                                                            # 获取显示文本

setMask(mask:QBitmap) -> None                                                   # 设置遮掩图像

setModified(enable:bool) -> None                                                # 设置文本更改状态
isModified() -> bool                                                            # 获取文本更改状态

setPlaceholderText(text:str) -> None                                            # 设置占位符文本(提示文本)
placeholderText() -> str                                                        # 获取占位符文本(提示文本)

setClearButtonEnabled(enable:bool) -> None                                      # 设置清除按钮是否可用
isClearButtonEnabled() -> bool                                                  # 获取清除按钮是否可用

setMaxLength(length:int) -> None                                                # 设置文本的最大长度
maxLength() -> int                                                              # 获取文本的最大长度

setReadOnly(enable:bool) -> None                                                # 设置文本是否只读
isReadOnly() -> bool                                                            # 获取文本是否只读

setAlignment(flag:Qt.AlignmentFlag) -> None                                     # 设置文本的对齐方式

setFrame(enable:bool) -> None                                                   # 设置是否显示外框

backspace() -> None                                                             # 删除光标左侧或选中的文本
del_() -> None                                                                  # 删除光标右侧或选中的文本

isUndoAvailable() -> bool                                                       # 是否可以撤销操作
isRedoAvailable() -> bool                                                       # 是否可以重做操作

setDragEnabled(enable:bool) -> None                                             # 设置文本是否允许拖拽
setEchoMode(mode:QLineEdit.EchoMode) -> None                                    # 设置文本框的显示模式
setTextMargins(margins:QMargins) -> None                                        # 设置文本区域到外框的距离
setCompleter(completer:QCompleter) -> None                                      # 设置自动补全组件

# 槽函数
setText(text:str) -> None                                                       # 设置文本
clear() -> None                                                                 # 清除文本
copy() -> None                                                                  # 复制文本选中的文本
cut() -> None                                                                   # 剪切文本选中的文本
paste() -> None                                                                 # 粘贴文本

  QLineEdit 类常用信号及其说明:

textEdited(text:str)                                                            # 文本被编辑时发射信号,不适用setText()方法引起的文本改变
textChanged(text:str)                                                           # 文本改变时发射信号,包含setText()方法引起的文本改变

cursorPositionChanged(oldPos:int, newPos:int)                                   # 光标位置改变时发射信号
selectionChanged()                                                              # 选中文本改变时发射信号

returnPressed()                                                                 # 按下Enter键时发射信号
editingFinished()                                                               # 编辑完成时发射信号,按下Enter键为编辑结束标记

inputRejected()                                                                 # 输入被拒绝时发射信号

  由于单行文本控件可以用于输入密码,其显示的内容并不一定是输入的内容。用 setText(str) 方法 设置文本内容;用 text()方法 获取真实的文本,而不是界面上显示的文本,例如在密码输入模式下,得到的是输入的密码,而不是界面上显示的掩码;用 displayText() 方法 获取显示的文本内容

  用 setEchoMode(mode:QLineEdit.EchoMode) 方法可以设置成密码输入方式,其中,参数 modeQLineEdit.EchoMode 类型的枚举值,可以设置的值如下:

QLineEdit.EchoMode.Normal                                                       # 0,正常显示输入的字符,这是默认值
QLineEdit.EchoMode.NoEcho                                                       # 1,输入文字时不显示任何输入,文字内容和个数都不可见
QLineEdit.EchoMode.Password                                                     # 2,显示密码掩码,不显示实际输入的字符,能显示字符个数
QLineEdit.EchoMode.PasswordEchoOnEdit                                           # 3,在编辑的时候显示字符,不编辑的时候显示掩码

  QLineEdit 中输入的数据有时只能为整数,有时只能为浮点数,这时就需要对输入的数据进行合法性检验。QLineEdit 的合法性检验用 setValidator(validator:QValidator) 方法,它的参数是一个 QValidator 类,QValidator 类用来 检查输入内容的合法性,当输入内容合法时,才能成功输入并在输入框中显示。

  QValidator 是一个抽象类,其子类 QIntValidatorQDoubleValidator 分别用来设置 合法整数合法浮点数,还有一个子类 QRegExpValidator 结合 正则表达式 来判断输入的合法性。

  我们在使用 QIntValidator 类创建整数校验器时,可以设置整数范围的下限和上限,其使用方法如下:

QIntValidator(parent:QWidget=None)
QIntValidator(min:int, max:int, parent:QWidget=None)

setBottom(buttom:int) -> None                                                   # 设置整数校验器的下限
setTop(top:int) -> None                                                         # 设置整数校验器的上限
setRange(min:int, max:int) -> None                                              # 设置整数校验器的范围

  同样,我们使用 QDoubleValidator 创建浮点型校验器时,可以设置浮点数的范围和小数位数,其使用方法如下:

QDoubleValidator(parent:QWidget=None)
QDoubleValidator(min:float, max:float, decimals:int, parent:QWidget=None)

setBottom(bottom:float) -> None                                                 # 设置浮点型校验器的下限
setTop(float) -> None                                                           # 设置浮点型校验器的上限
setDecimals(int) -> None                                                        # 设置浮点型校验器的小数位数
setRange(min:float, max:float, decimals:int) -> None                            # 设置浮点型校验器的范围和小数位数

  在 QLineEdit 中输入数据时,可以有辅助性的提示信息帮助快速完成输入,用 setCompleter(complater:QCompleter) 方法 设置辅助补全的内容,其中 QCompleter辅助补全的类。创建辅助补全的方法如下:

QCompleter(parent:QObject=None)
QCompleter(completions:Sequence[str], parent:QObject=None)
QCompleter(model:QAbstractItemModel, parent:QObject=None)

  我们可以用 QCompletersetCompletionMode(mode:QCompleter.CompletionMode) 方法 设置模式,其中参数 modeQCompleter.CompletionMode 类型的枚举值,可以取值如下:

QCompleter.CompletionMode.PopupCompletion                                       # 弹窗模式
QCompleter.CompletionMode.InlineCompletion                                      # 输入框内选中模式
QCompleter.CompletionMode.UnfilteredPopupCompletion                             # 以弹窗模式列出所有可能的选项

  当我们用代码在 QLineEdit插入文字或选择文字时,需要定位光标的位置,获取或移动光标的方法如下所示:

cursorBackward(mark:bool, steps:int=1) -> None                                  # 向左移动steps个字符,mark为True时带选中效果
cursorForward(mark:bool, steps:int=1) -> None                                   # 向右移动steps个字符,mark为True时带选中效果
home(mark:bool) -> None                                                         # 移动光标到文本开头,mark为True时带选中效果
end(mark:bool) -> None                                                          # 移动光标到文本末尾,mark为True时带选中效果
setCursorPosition(position:int) -> None                                         # 设置光标到指定位置
cursorPosition() -> int                                                         # 获取光标位置
cursorPositionAt(pos:QPoint) -> int                                             # 获取指定位置出的光标位置

  当我们对 QLineEdit 中的文本可以进行复制、粘贴、删除等操作,一般都需要先选择文本,然后再操作。选择文本 的方法如下所示:

# 实例方法
setSelection(start:int, end:int) -> None                                        # 选中指定范围内的文本
deselect() -> None                                                              # 取消选中
hasSelectedText() -> bool                                                       # 判断是否选中文本
selectionLength() -> int                                                        # 返回选中文本的长度
selectionStart() -> int                                                         # 返回选中文本的起始位置
selectionEnd() -> int                                                           # 返回选中文本的结束位置
selectedText() -> str                                                           # 返回选中文本

# 槽函数
selectAll() -> None                                                             # 选中全部文本

  对于需要输入固定格式的文本,可以用 setInputMask(mask:str) 方法来 定义这种固定的格式。例如 setInputMask("000.000.000.000")setInputMask("000.000.000.000;_) 方法都可以输入 IP 地址,后者在未输入字符的位置用下划线来表示空位;setInputMask("HH:HH:HH:HH:HH:HH")setInputMask("HH:HH:HH:HH:HH:HH;_;_") 方法都可以输入 MAC 地址;setInputMask("0000-00-00") 方法可以输入 ISO 标准格式日期,setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#") 方法可以用于输入 License 序列号,所有字母转换为大写。可以用于格式化输入的字符如下所示:

字符 含义
A 字母是必须的,取值范围为 A ~ Z, a ~ z
a 字母是允许的,但不是必须的
N 字母和数字是必须的,取值范围为 A ~ Z, a ~ z, 0 ~ 9
n ASCII 字母和数字是允许的,但不是必须的
X 任何字符都是必须的
x 任何字符都是允许的,但不是必须的
9 数字是必须的,取值范围为 0 ~ 9
0 数字是允许的,但不是必须的
D 数字是必须的,取值范围为 0 ~ 9
d 数字是允许的,但不是必须的,取值范围为 0 ~ 9
# 数字或加减符号是允许的,但不是必须的
H 十六进制数据是必须的,取值范围为 A ~ F, a ~ f, 0 ~ 9
h 十六进制数据是允许的,但不是必须的
B 二进制数据是必须的,取值范围为 0, 1
b 二进制数据是允许的,但不是必须的
> 所有字母都大写
< 所有字母都小写
! 关闭大小写转换
\ 使用 \ 去转移上述列出的特殊字符
;c 终止输入遮掩,并把空余输入设置成 c

  我们新建一个 ui.py 文件,用来存放 UI 相关的代码。

from PySide6.QtWidgets import QWidget
from PySide6.QtWidgets import QLabel, QLineEdit
from PySide6.QtGui import QIntValidator
from PySide6.QtWidgets import QFormLayout

class MyUi:
    def setupUi(self, window:QWidget):
        window.setFixedSize(300, 120)                                           # 1.设置窗口对象大小

        layout = QFormLayout(window)                                            # 2.创建表单布局对象,并指定父窗口
  
        self.phone_number_lineEdit = QLineEdit(window)                          # 3.创建单行文本框对象,并指定父窗口
        layout.addRow("手机号(&U)", self.phone_number_lineEdit)                  # 4.添加标签和单行文本框到表单布局中

        self.password_lineEdit = QLineEdit(window)
        layout.addRow("密码(&P)", self.password_lineEdit)

        self.ip_lineEdit = QLineEdit(window)
        layout.addRow("IP地址(&I)", self.ip_lineEdit)

        self.label = QLabel(window)
        layout.addRow(self.label)

        self.phone_number_lineEdit.setPlaceholderText("请输入手机号")             # 5.设置单行文本框浮现内容
        self.password_lineEdit.setPlaceholderText("请输入密码")

        self.phone_number_lineEdit.setMaxLength(11)                             # 6.设置允许单行文本框输入的字符的最大长度

        int_validator = QIntValidator()                                         # 7.创建整数验证器对象
        self.phone_number_lineEdit.setValidator(int_validator)                  # 8.设置单行文本框的验证器为整数验证器对象

        self.password_lineEdit.setEchoMode(QLineEdit.EchoMode.Password)         # 9.设置单行文本框的显示模式为密码模式

        self.ip_lineEdit.setInputMask("000.000.000.000")                        # 10.设置单行文本框的输入掩码

        self.phone_number_lineEdit.setClearButtonEnabled(True)                  # 11.设置清空按钮
        self.password_lineEdit.setClearButtonEnabled(True)
        self.ip_lineEdit.setClearButtonEnabled(True)

  我们新建一个 widget.py 文件,用来存放业务逻辑相关的代码。

import sys

from PySide6.QtWidgets import QApplication, QWidget

from ui import MyUi

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()                                                      # 1.调用父类Qwidget类的__init__()方法
      
        self.__ui = MyUi()
        self.__ui.setupUi(self)                                                 # 2.初始化页面

        # 3.关联单行文本框的结束编辑时触发信号
        self.__ui.phone_number_lineEdit.editingFinished.connect(self.phone_number_lineEdit_editing_finished)

    def phone_number_lineEdit_editing_finished(self):
        self.__ui.label.setText(self.__ui.phone_number_lineEdit.text())

if __name__ == "__main__":
    app = QApplication(sys.argv)                                                # 1.创建一个QApplication类的实例
    window = MyWidget()                                                         # 2.创建一个窗口
    window.show()                                                               # 3.显示窗口
    sys.exit(app.exec())                                                        # 4.进入程序的主循环,并通过exit函数确保主循环安全结束

三、多行文本框控件

  多行文本控件可以用于编辑和显示多行文本和图片,并可对文本进行格式化。多行文本编辑控件 QTextEdit 继承自 QAbstractScrollAreaQAbstractScrollArea 为其子类提供中心视口(viewport)控件,从而保证子类显示的内容超过控件窗口的范围时,提供竖直和水平滚动条。

  QTextEdit 是主要用于 显示并编辑多行文本的控件,支持富文本,当文本内容超出控件显示范围时,可以显示水平和竖直滚动条。QTextEdit 不仅可以用来显示文本,还可以用来显示 HTML 文档。

QTextEdit 类创建实例对象的方法如下所示:

QTextEdit(parent:QWidget=None)
QTextEdit(text:str, parent:QWidget=None)

其中 parent窗口 或者 容器类控件text要显示的文本内容

  多行文本控件的常用方法如下:

# 实例方法
toHtml() -> str                                                                 # 获取html格式的文本
toPlainText() -> str                                                            # 获取纯文本格式的文本

setPlaceholderText(placeholderText:str) -> None                                 # 设置占位符文本
placeholderText() -> str                                                        # 获取占位符文本

createStandardContextMenu(position:QPoint) -> QMenu                             # 创建标准的右键菜单

setCurrentCharFormat(format:QTextCharFormat) -> None                            # 设置当前字符格式
currentCharFormat() -> QTextCharFormat                                          # 获取当前字符格式

find(exp:str, options=QTextDocument.FindFlags()) -> int                         # 查找文本
print_(printer:QPrinter) -> None                                                # 打印文本

setAcceptRichText(accept:bool) -> None                                          # 设置是否接受富文本
acceptRichText() -> bool                                                        # 获取是否接受富文本

setCursorWidth(width:int) -> None                                               # 设置光标宽度
setTextCursor(cursor:QTextCursor) -> None                                       # 设置文本光标
textCursor() -> QTextCursor                                                     # 获取文本光标

setHorizontalScrollBarPolicy(policy:Qt.ScrollBarPolicy) -> None                 # 设置水平滚动条策略
setVerticalScrollBarPolicy(policy:Qt.ScrollBarPolicy) -> None                   # 设置垂直滚动条策略

setDocument(document:QTextDocument) -> None                                     # 设置文档
setDocumentTitle(title:str) -> None                                             # 设置文档标题

currentFont() -> QFont                                                          # 获取当前字体
fontFamily() -> str                                                             # 获取字体名称
fontItalic() -> bool                                                            # 获取字体是否斜体
fontPointSize() -> float                                                        # 获取字体大小
fontUnderline() -> bool                                                         # 获取字体是否下划线
fontWeight() -> int                                                             # 获取字体粗细

setOverwriteMode(overwrite:bool) -> None                                        # 设置是否允许覆盖
overwriteMode() -> bool                                                         # 获取是否允许覆盖

setReadOnly(ro:bool) -> None                                                    # 设置是否只读
isReadOnly() -> bool                                                            # 获取是否只读

setTabStopDistance(distance:float) -> None                                      # 设置tab停止距离
tabStopDistance() -> float                                                      # 获取tab停止距离

textBackgroundColor() -> QColor                                                 # 获取文字背景颜色
textColor() -> QColor                                                           # 获取文字颜色

setUndoRedoEnabled(enable:bool) -> None                                         # 设置是否允许撤销和重做
isUndoRedoEnabled() -> bool                                                     # 获取是否允许撤销和重做

setWordWrapMode(policy:Qt.WordWrapMode) -> None                                 # 设置换行模式
wordWrapMode() -> Qt.WordWrapMode                                               # 获取换行模式

zoomInF(range:int=1) -> None                                                    # 放大

canPaste() -> bool                                                              # 获取是否可以粘贴

# 槽函数
setText(text:str) -> None                                                       # 设置显示的文本
append(text:str) -> None                                                        # 追加文本
setPlainText(text:str) -> None                                                  # 设置纯文本文字
insertPlainText(text:str) -> None                                               # 插入纯文本文字
setHtml(text:str) -> None                                                       # 设置html格式文字
insertHtml(text:str) -> None                                                    # 插入html格式文字

setAlignment(alignment:Qt.AlignmentFlag) -> None                                # 设置文字对齐方式

setCurrentFont(font:QFont) -> None                                              # 设置字体
setFontFamily(family:str) -> None                                               # 设置字体名称
setFontItalic(enable:bool) -> None                                              # 设置字体是否斜体
setFontPointSize(size:float) -> None                                            # 设置字体大小
setFontUnderline(enable:bool) -> None                                           # 设置字体是否下划线
setFontWeight(weigth:int) -> None                                               # 设置字体粗细
setTextBackgroundColor(color:QColor) -> None                                    # 设置文字背景颜色
setTextColor(color:QColor) -> None                                              # 设置文字颜色

selectAll() -> None                                                             # 全选
clear() -> None                                                                 # 清空
copy() -> None                                                                  # 复制
cut() -> None                                                                   # 剪切
paste() -> None                                                                 # 粘贴
undo() -> None                                                                  # 撤销
redo() -> None                                                                  # 重做

zoomIn(range:int=1) -> None                                                     # 放大
zoomOut(range:int=1) -> None                                                    # 缩小

  多行文本框常用信号及其说明如下:

textChanged()                                                                   # 文本改变时发射信号
selectionChanged()                                                              # 选中文本改变时发射信号
copyAvailable(b:bool)                                                           # 复制文本时发射信号
currentCharFormatChanged(format: QTextCharFormat)                               # 改变字体样式时发射信号
cursorPositionChanged()                                                         # 光标位置改变时发射信号
redoAvailable(b: bool)                                                          # 重做时发射信号
undoAvailable(b:bool)                                                           # 撤销时发射信号

  我们可以用 QTextEdit 类的 setCurrentCharFormat(format:QTextCharFormat) 方法可以 设置文字的字体格式。参数 formatQTextCharFormat 类的对象,用于 定义字体的格式参数。文字格式 QTextCharFormat 的常用方法如下所示:

# 设置字体
setFont(font:QFont, behavior:QTextCharFormat.FontPropertiesInheritanceBehavior=QTextCharFormat.FontPropertiesInheritanceBehavior.FontPropertiesAll) -> None   
setFontCapitalization(capitalization:QTextCharFormat.FontCapitalization) -> None    # 设置大小写
setFontFamilies(families:Sequence[str]) -> None                                 # 设置字体名称
setFontFamily(family:str) -> None                                               # 设置字体
setFontFixedPitch(enable:bool) -> None                                          # 设置固定宽度字体
setFontItalic(enable:bool) -> None                                              # 设置斜体

setFontKerning(enable:bool) -> None                                             # 设置字距
setFontWordSpacing(spacing:float) -> None                                       # 设置字间隙
setFontLetterSpacing(spacing:float) -> None                                     # 设置字符间隙
setFontLetterSpacingType(letterSpacingType:QFont.SpacingType) -> None           # 设置字符间隙样式

setFontOverline(enable:bool) -> None                                            # 设置上划线
setFontUnderline(enable:bool) -> None                                           # 设置下划线

setUnderlineColor(color:Union[QColor, Qt.GlobalColor]) -> None                  # 设置下划线颜色
setUnderlineStyle(style:Qt.QTextCharFormat.UnderlineStyle) -> None              # 设置下划线样式

setFontStrikeOut(enable:bool) -> None                                           # 设置删除线
setTextOutline(pen:Union[Qt.PenStyle]) -> None                                  # 设置轮廓线

setSuperScriptBaseline(baseline:float:50) -> None                               # 设置上标基线(字体高度百分比值)
setSubScriptBaseline(baseline:float=16.67) -> None                              # 设置下标基线(字体高度百分比值)

setFontPointSize(size:int) -> None                                              # 设置字体大小
setFontWeight(weight:int) -> None                                               # 设置字体粗细

setFontStretch(factor:int) -> None                                              # 设置拉伸百分比
setBaselineOffset(baseline:float) -> None                                       # 设置基线偏移
setVerticalAlignment(alignment:Qt.AlignmentFlag) -> None                        # 设置垂直对齐

setToolTip(text:str) -> None                                                    # 设置提示

setAnchor(anchor:bool) -> None                                                  # 设置锚点
setAnchorHref(value:str) -> None                                                # 设置锚点链接
setAnchorNames(names:Sequence[str]) -> None                                     # 设置锚点名称

  其中,用 setFont(QFont,behavior=QTextCharFormat.FontPropertiesAll) 方法 设置字体,其中参数 behavior 可以取值如下:

QTextCharFormat.FontPropertiesInheritanceBehavior.FontPropertiesSpecifiedOnly   # 在没有明确改变一个属性时不改变属性的值
QTextCharFormat.FontPropertiesInheritanceBehavior.FontPropertiesAll             # 用默认的值覆盖现有的值

  用 setUnderlineStyle(fontFormat:QTextCharFormat.UnderlineStyle) 方法 设置下划线的风格,其中参数 fontFormatQTextCharFormat.UnderlineStyle 类型的枚举值,可以取值如下:

QTextCharFormat.UnderlineStyle.SingleUnderline
QTextCharFormat.UnderlineStyle.DashUnderline
QTextCharFormat.UnderlineStyle.DotLine
QTextCharFormat.UnderlineStyle.DashDotLine
QTextCharFormat.UnderlineStyle.DashDotDotLine
QTextCharFormat.UnderlineStyle.WaveUnderline
QTextCharFormat.UnderlineStyle.SpellCheckUnderline

  用 setVerticalAlignment(format:QTextCharFormat.VerticalAlignment) 方法 设置文字在竖直方向的对齐方式,参数 formantQTextCharFormat.VerticalAlignment 类型的枚举值,可以取值如下:

QTextCharFormat.VerticalAlignment.AlignNormal
QTextCharFormat.VerticalAlignment.AlignSuperScript
QTextCharFormat.VerticalAlignment.AlignSubScript
QTextCharFormat.VerticalAlignment.AlignMiddle
QTextCharFormat.VerticalAlignment.AlignBottom
QTextCharFormat.VerticalAlignment.AlignTop
QTextCharFormat.VerticalAlignment.AlignBaseline

  QTextCursor 类是 QTextEdit 文档中的光标,用于捕获光标在文档中的位置,选择文字,在光标位置处插入文本、图像、文本块(段落)和表格等。用 QTextCursor 创建光标对象的方法如下所示,可以为一个文档创建多个 QTextCursor 光标。

QTextCursor()
QTextCursor(block:QTextBlock)
QTextCursor(document:QTextDocument)
QTextCursor(frame:QTextFrame)

  文本光标 QTextCursor 的常用方法如下:

setPosition(pos:int, mode:QTextCursor.MoveMode = QTextCursor.MoveMode.MoveAnchor) -> None   # 设置光标的位置

position() -> int                                                               # 获取光标的位置
positionInBlock() -> int                                                        # 获取光标在块内的位置

atStart() -> bool                                                               # 判断光标是否在文本的开始
atEnd() -> bool                                                                 # 判断光标是否在文本的结束
atBlockStart() -> bool                                                          # 判断光标是否在块的开始
atBlockEnd() -> bool                                                            # 判断光标是否在块的结束

setCharFormat(format:QTextCharFormat) -> None                                   # 设置文本的格式
setBlockCharFormat(format:QTextCharFormat) -> None                              # 设置块内文本的格式
setBlockFormat(format:QTextBlockFormat) -> None                                 # 设置块(段落)的格式

block() -> QTextBlock                                                           # 获取光标所在的块
charFormat() -> QTextCharFormat                                                 # 获取光标所在的文本的格式
blockCharFormat() -> QTextCharFormat                                            # 获取光标所在的块内文本的格式
blockFormat() -> QTextBlockFormat                                               # 获取光标所在的块的格式

clearSelection() -> None                                                        # 清除选择,将锚点移动到光标位置
deleteChar() -> None                                                            # 删除选中的或当前的文字
deletePreviousChar() -> None                                                    # 删除选中的或光标前置的文字
document() -> QTextDocument                                                     # 获取文本文档

removeSelectedText() -> None                                                    # 删除选中的文本
selectedText() -> str                                                           # 获取选中的文本

insertText(text:str) -> None                                                    # 插入文本
insertText(text:str, format:QTextCharFormat) -> None                            # 插入文本,并设置文本格式
insertBlock() -> None                                                           # 插入新文本块
insertBlock(format:QTextBlockFormat) -> None                                    # 插入新文本块,并设置块格式
insertFragment(fragment:QTextDocumentFragment) -> None                          # 插入文本片段
insertFrame(format:QTextFrameFormat) -> None                                    # 插入框架
insertHtml(html:str) -> None                                                    # 插入HTML
insertImage(format:QTextImageFormat) -> None                                    # 插入带格式的图片
insertImage(image:QImagename, name:str="") -> None                              # 插入图片
insertImage(name:str) -> None                                                   # 插入图片
insertList(format:QTextListFormat) -> None                                      # 插入列表
insertList(style:QTextListFormat.Style) -> None                                 # 插入列表
insertTable(rows:int, columns:int) -> None                                      # 插入表格
insertTable(rows:int, columns:int, format:QTextTableFormat) -> None             # 插入带格式的表格

  如果文档中有锚点 anchor(),则在锚点位置和光标位置 position() 之间的文本会被选中。用 setPosition(pos:int, mode=QTextCursor.MoveAnchor)方法 移动光标或锚点到指定位置,参数 modeQTextCursor.MoveMode 类型的枚举值,可取值如下:

QTextCursor.MoveMode.MoveAnchor
QTextCursor.MoveMode.KeepAnchor

  我们修改 ui.py 文件的内容。

from PySide6.QtWidgets import QWidget
from PySide6.QtWidgets import QTextEdit
from PySide6.QtWidgets import QVBoxLayout
from PySide6.QtGui import QColor, QTextOption, QTextImageFormat

class MyUi:
    def setupUi(self, window:QWidget):
        window.setFixedSize(800, 600)                                           # 1.设置窗口对象大小
  
        textEdit = QTextEdit(window)                                            # 2.创建多行文本框对象

        layout = QVBoxLayout(window)                                            # 3.创建一个垂直布局
        layout.addWidget(textEdit)                                              # 4.添加多行文本框控件到布局中

        textEdit.setFontFamily("华文楷体")                                       # 5.设置字体
        textEdit.setFontPointSize(32)                                           # 6.设置字体大小
        textEdit.setTextColor("blue")                                           # 7.设置文本颜色
        textEdit.setTextBackgroundColor(QColor(255, 0, 0))                      # 8.设置文本的背景颜色
        textEdit.setWordWrapMode(QTextOption.WrapMode.WrapAnywhere)             # 9.设置文本换行模式

        textEdit.append("你好,王小美。")                                         # 10.在文本框中追加内容
        textEdit.append("椰羊,传说中的半仙之兽\n")

        textEdit.insertHtml("<a href='https://www.baidu.com' style='font-size: 32px;'>百度一下</a><br/>")   # 11.在文本框中插入HTML代码

        textEdit_cursor = textEdit.textCursor()                                 # 12.获取文本框的游标

        image = QTextImageFormat()                                              # 13.创建文本图片格式
        image.setName("assets/images/1.jpg")                                    # 14.设置图片名称
        image.setWidth(600)                                                     # 15.设置图片宽度
        textEdit_cursor.insertImage(image)                                      # 16.插入图片

  我们修改 widget.py 文件中的内容。

import sys

from PySide6.QtWidgets import QApplication, QWidget

from ui import MyUi

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()                                                      # 1.调用父类Qwidget类的__init__()方法
      
        self.__ui = MyUi()
        self.__ui.setupUi(self)                                                 # 2.初始化页面

if __name__ == "__main__":
    app = QApplication(sys.argv)                                                # 1.创建一个QApplication类的实例
    window = MyWidget()                                                         # 2.创建一个窗口
    window.show()                                                               # 3.显示窗口
    sys.exit(app.exec())                                                        # 4.进入程序的主循环,并通过exit函数确保主循环安全结束

四、多行纯文本控件

  QPlainTextEdit 的大部分方法与 QTextEdit 的方法相同,其常用方法如下所示:

# 实例方法
toPlainText() -> str                                                            # 获取纯文本格式的文本

setPlaceholderText(placeholderText:str) -> None                                 # 设置占位符文本
placeholderText() -> str                                                        # 获取占位符文本

createStandardContextMenu(position:QPoint) -> QMenu                             # 创建标准的右键菜单

setCurrentCharFormat(format:QTextCharFormat) -> None                            # 设置当前字符格式
currentCharFormat() -> QTextCharFormat                                          # 获取当前字符格式

find(exp:str, options=QTextDocument.FindFlags()) -> int                         # 查找文本
print_(printer:QPrinter) -> None                                                # 打印文本

setCursorWidth(width:int) -> None                                               # 设置光标宽度
setTextCursor(cursor:QTextCursor) -> None                                       # 设置文本光标
textCursor() -> QTextCursor                                                     # 获取文本光标

setHorizontalScrollBarPolicy(policy:Qt.ScrollBarPolicy) -> None                 # 设置水平滚动条策略
setVerticalScrollBarPolicy(policy:Qt.ScrollBarPolicy) -> None                   # 设置垂直滚动条策略

setDocument(document:QTextDocument) -> None                                     # 设置文档
setDocumentTitle(title:str) -> None                                             # 设置文档标题

setOverwriteMode(enable:bool) -> None                                           # 设置是否允许覆盖
overwriteMode() -> bool                                                         # 获取是否允许覆盖

setReadOnly(enable:bool) -> None                                                # 设置是否只读
isReadOnly() -> bool                                                            # 获取是否只读

setTabStopDistance(distance:float) -> None                                      # 设置tab停止距离
tabStopDistance() -> float                                                      # 获取tab停止距离

setUndoRedoEnabled(enable:bool) -> None                                         # 设置是否允许撤销和重做
isUndoRedoEnabled() -> bool                                                     # 获取是否允许撤销和重做

setWordWrapMode(policy:Qt.WordWrapMode) -> None                                 # 设置换行模式
wordWrapMode() -> Qt.WordWrapMode                                               # 获取换行模式

setCenterOnScroll(enabled:bool) -> None                                         # 移动竖直滚动条时时光标所在的位置可见
centerOnScroll() -> bool                                                        # 获取移动竖直滚动条时时光标所在的位置是否可见

setBackgroundVisible(visible:bool) -> None                                      # 设置文档区之外调色板背景是否可见
backgroundVisible() -> bool                                                     # 获取文档区之外调色板背景是否可见

zoomInF(range:int=1) -> None                                                    # 放大

canPaste() -> bool                                                              # 获取是否可以粘贴

# 槽函数
setPlainText(text:str) -> None                                                  # 设置纯文本文字
insertPlainText(text:str) -> None                                               # 插入纯文本文字
appendPlainText(text:str) -> None                                               # 追加纯文本文字

appendHtml(html:str) -> None                                                    # 追加HTML

selectAll() -> None                                                             # 全选
clear() -> None                                                                 # 清空
copy() -> None                                                                  # 复制
cut() -> None                                                                   # 剪切
paste() -> None                                                                 # 粘贴
undo() -> None                                                                  # 撤销
redo() -> None                                                                  # 重做

zoomIn(range:int=1) -> None                                                     # 放大
zoomOut(range:int=1) -> None                                                    # 缩小

  多行纯文本框常用信号及其说明如下:

textChanged()                                                                   # 文本改变时发射信号
selectionChanged()                                                              # 选中文本改变时发射信号
modificationChanged(changed:bool)                                               # 文本内容改变时发射信号

copyAvailable(b:bool)                                                           # 复制文本时发射信号

blockCountChanged(newBlockCount:int)                                            # 块(段落)数量发生改变时发射信号

cursorPositionChanged()                                                         # 光标位置改变时发射信号

redoAvailable(b: bool)                                                          # 重做时发射信号
undoAvailable(b:bool)                                                           # 撤销时发射信号

  我们修改 ui.py 文件的内容。

from PySide6.QtWidgets import QWidget
from PySide6.QtWidgets import QPlainTextEdit
from PySide6.QtWidgets import QVBoxLayout
from PySide6.QtGui import QTextOption

class MyUi:
    def setupUi(self, window:QWidget):
        window.setFixedSize(800, 600)                                           # 1.设置窗口对象大小
  
        plainTextEdit = QPlainTextEdit(window)                                  # 2.创建多行纯文本框对象

        layout = QVBoxLayout(window)                                            # 3.创建一个垂直布局
        layout.addWidget(plainTextEdit)                                         # 4.添加多行纯文本框控件到布局中

        plainTextEdit.setWordWrapMode(QTextOption.WrapMode.WrapAnywhere)        # 5.设置文本换行模式

        plainTextEdit.appendPlainText("你好,王小美。")                           # 6.在文本框中追加内容
        plainTextEdit.appendPlainText("椰羊,传说中的半仙之兽\n")

        plainTextEdit.appendHtml("<a href='https://www.baidu.com' style='font-size: 32px;'>百度一下</a><br/>")  # 7.在文本框中追加HTML代码
posted @ 2024-12-25 18:08  星光映梦  阅读(213)  评论(0)    收藏  举报