09. 文本框控件
一、文本框控件
图形界面上需要输入信息,与程序进行沟通,输入数据信息的控件有单行文本控件、多行文本控件等。
我们可以在终端中使用 pip 安装 PySide6 模块。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载。
pip install pyside6 -i https://mirrors.aliyun.com/pypi/simple
国内常用的 pip 下载源列表:
- 阿里云 https://mirrors.aliyun.com/pypi/simple
- 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple
- 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple
二、单行文本框控件
QLineEdit 控件是 单行文本编辑器,用于接收用户输入的字符串数据,并显示字符串数据,输入的整数和浮点数也会当作字符串数据。可以利用 int() 和 float() 函数将字符串型整数和浮点数转换成整数和浮点数。
用 QLineEdit 类创建实例对象的方法如下:
QLineEdit(parent:QWidget=None)
QLineEdit(text:str, parent:QWidget=None)
其中 parent 是 窗口 或者 容器类控件 ,text 是 QLineEdit 上 显示的本文 。
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) 方法可以设置成密码输入方式,其中,参数 mode 是 QLineEdit.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 是一个抽象类,其子类 QIntValidator、QDoubleValidator 分别用来设置 合法整数 和 合法浮点数,还有一个子类 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)
我们可以用 QCompleter 的 setCompletionMode(mode:QCompleter.CompletionMode) 方法 设置模式,其中参数 mode 是 QCompleter.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 继承自 QAbstractScrollArea。QAbstractScrollArea 为其子类提供中心视口(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) 方法可以 设置文字的字体格式。参数 format 是 QTextCharFormat 类的对象,用于 定义字体的格式参数。文字格式 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) 方法 设置下划线的风格,其中参数 fontFormat 是 QTextCharFormat.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) 方法 设置文字在竖直方向的对齐方式,参数 formant 是 QTextCharFormat.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)方法 移动光标或锚点到指定位置,参数 mode 是 QTextCursor.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代码

浙公网安备 33010602011771号