1 行文本输入框(QLineEdit)


1.1 基本

单行文本框回显
python import sys from PyQt6.QtWidgets import QMainWindow, QApplication, QWidget, QLineEdit, QFormLayout, QMessageBox from PyQt6.QtGui import QAction, QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # 创建行为 act = QAction(self) act.setIcon(QIcon('voice.png')) act.triggered.connect(self.acttriggered) # 创建单行文本框 self.line = QLineEdit() # QLineEdit('Peter', self) 初始带文字 # 聚焦文本框 self.line.setFocus() # 全选字符 self.line.selectAll() # 背景字 self.line.setPlaceholderText('Input name here') # 空白时提示信息 # 文字分布 self.line.setAlignment(Qt.AlignmentFlag.AlignLeft) # Qt.AlignmentFlag.AlignLeft 左对齐(缺省值) # Qt.AlignmentFlag.AlignRight 右对齐 # Qt.AlignmentFlag.AlignHCenter 水平居中(居中时,不显示背景字) # Qt.AlignmentFlag.AlignJustify 水平对齐可用文本 # 单行文本修改信号传递 self.line.textChanged.connect(self.textChanged) # 文本框添加行为 self.line.addAction(act, QLineEdit.ActionPosition.TrailingPosition) formLayout = QFormLayout() formLayout.addRow('Name', self.line) widget = QWidget() widget.setLayout(formLayout) self.setCentralWidget(widget) self.show() def acttriggered(self): QMessageBox.information(self,'提示信息','他叫'+ self.line.text() + ' 呗?') # 单行文本编辑事件 def textChanged(self, text): print('Hello ' + text) def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()

1.2 掩码(setInputMask)

单行文本框回显
python import sys from PyQt6.QtWidgets import QMainWindow, QWidget, QLineEdit, QFormLayout from PyQt6.QtGui import QIntValidator, QDoubleValidator, QRegularExpressionValidator from PyQt6.QtCore import QRegularExpression class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # 单行文本框掩码 # 创建单行文本框(初始空文本) line_birthday = QLineEdit() line_birthday.setPlaceholderText('Input password here') # 掩码限制出入信息 line_birthday.setInputMask('0000/00/00') ''' A (A-Z,a-z) 必须输入 a (A-Z,a-z) 非必须输入 N (A-Z,a-z,0-9) 必须输入 n (A-Z,a-z,0-9) 非必须输入 X (任何字符) 必须输入 x (任何字符) 非必须输入 9 (0-9) 必须输入 0 (0-9) 非必须输入 D (1-9) 必须输入 d (1-9) 非必须输入 # (1-9,+,-) 非必须输入 H (A-F,a-f,0-9) 必须输入 h (A-F,a-f,0-9) 非必须输入 B (0,1) 必须输入 b (0,1) 非必须输入 > 所有字母字符大写 < 所有字母字符小写 ! 关闭大小写转换 \ 使用‘\’转义上面列出的字符 ''' formLayout = QFormLayout() formLayout.addRow("Birthday", line_birthday) widget = QWidget() widget.setLayout(formLayout) self.setCentralWidget(widget) self.show() def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()

1.3 校验(setValidator)

单行文本框回显 — setValidator
python import sys from PyQt6.QtWidgets import QMainWindow, QWidget, QLineEdit, QFormLayout from PyQt6.QtGui import QIntValidator, QDoubleValidator, QRegularExpressionValidator from PyQt6.QtCore import QRegularExpression class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # ----------------------------- 单行文本框(整数校验) ----------------------------- # line_age = QLineEdit() line_age.setPlaceholderText('Input age here') # 创建整数校验器 intvalidator = QIntValidator() # 设置整数校验器范围 intvalidator.setRange(1, 99) # 设置单行文本框的校验器 line_age.setValidator(intvalidator) # ----------------------------- 单行文本框(浮点校验) ----------------------------- # line_height = QLineEdit() line_height.setPlaceholderText('Input height(kg) here') # 创建浮点校验器 doublevalidator = QDoubleValidator() # 设置浮点校验器范围 doublevalidator.setRange(0,250) # 设置浮点数的符号 doublevalidator.setNotation(QDoubleValidator.Notation.StandardNotation) # QDoubleValidator.StandardNotation 标准数字法 0.1875 # QDoubleValidator.ScientificNotation 科学计数法 1.875E-2 # 设置小数点后位数 doublevalidator.setDecimals(1) # 设置单行文本框的校验器 line_height.setValidator(doublevalidator) # ----------------------------- 单行文本框(正则校验) ----------------------------- # line_nick = QLineEdit() line_nick.setPlaceholderText('Input nickname here') # 创建正则表达式校验器 regvalidator = QRegularExpressionValidator() # 设置正则表达式 re = QRegularExpression("[a-zA-Z0-9]+$") # 设置正则表达式校验器范围 regvalidator.setRegularExpression(re) # 设置单行文本框的校验器 line_nick.setValidator(regvalidator) formLayout = QFormLayout() formLayout.addRow("Age", line_age) formLayout.addRow("Height", line_height) formLayout.addRow("NickName", line_nick) widget = QWidget() widget.setLayout(formLayout) self.setCentralWidget(widget) self.show() def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()

1.4 回显(setEchoMode)

单行文本框回显 — setEchoMode
python import sys from PyQt6.QtWidgets import QMainWindow, QWidget, QApplication, QLineEdit, QFormLayout from PyQt6.QtCore import Qt class QWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): line_password = QLineEdit() line_password.setPlaceholderText('Input password here') # 回显模式 line_password.setEchoMode(QLineEdit.EchoMode.Password) # 类名.枚举名.枚举值 # QLineEdit.EchoMode.Normal 正常显示 不设置回显模式就这样 # QLineEdit.EchoMode.EnoEcho 不显示 # QLineEdit.EchoMode.Password 密码:时刻显示圆点 # QLineEdit.EchoMode.PasswordEchoOnEdit 密码:输入时正常显示,确认后圆点 # 禁用输入框内上下文菜单(防止密码泄露) line_password.setContextMenuPolicy(Qt.ContextMenuPolicy.NoContextMenu) # Qt.ContextMenuPolicy.NoContextMenu 小部件没有上下文菜单 # 单行文本编辑结束事件 line_password.editingFinished.connect(self.enterPress) formLayout = QFormLayout() formLayout.addRow("Password", line_password) widget = QWidget() widget.setLayout(formLayout) self.setCentralWidget(widget) self.show() # 单行文本编辑结束事件 def enterPress(self): print('密码设置完毕') def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if __name__ == '__main__': main()

1.5 DLC

官方文档
[QLineEdit Class Qt Widgets 6.3.2](https://doc.qt.io/qt-6/qlineedit.html)
单行输入框使用
PyQt5系列教程(28): 文本输入栏(QLineEdit)2
单行文本框密码
PyQt5系列教程(29): 文本输入栏(QLineEdit)3
单行文本框补全
PyQt5系列教程(30): 文本输入栏(QLineEdit)4

2 纯文本输入框(QPlainTextEdit)


2.1 基本

纯文本输入框 — QPlainTextEdit
python import sys from PyQt6.QtWidgets import QMainWindow, QApplication, QWidget, QPlainTextEdit, QLineEdit, QVBoxLayout, QHBoxLayout, QFormLayout, QMessageBox from PyQt6.QtGui import QAction, QIcon, QFont from PyQt6.QtCore import Qt class QWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # 创建纯文本输入框 self.ptext = QPlainTextEdit() # 设置输入框的字体和字号 self.ptext.setFont(QFont('Calibri',12)) # 设置换行模式 self.ptext.setLineWrapMode(QPlainTextEdit.LineWrapMode.WidgetWidth) # QPlainTextEdit.LineWrapMode.NoWrap 所有信息在同一行,不自动换行 # QPlainTextEdit.LineWrapMode.WidgetWidth 所有信息在一行中装不下便自动换行(缺省值) self.setCentralWidget(self.ptext) self.show() def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if __name__ == '__main__': main()

2.2 DLC

DLC — 行数 & 当前行高光
PyQt5系列教程(32): 纯文本输入框(QPlainTextEdit)2–这次没翻车 PyQt5系列教程(33): 纯文本输入框(QPlainTextEdit)3–终篇 PyQt 给Edit 添加行号 - 望月又一 - 博客园

3 富文本输入框(QTextEdit)


3.1 基本

3.1.1 文本输入(自带换行)

多行文本框 — QTextEdit
python import sys from PyQt6.QtWidgets import * from PyQt6.QtGui import * class QWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # 创建并输入 # 创建多行文本框 self.textedit = QTextEdit() # 可通过参数设定文本框内容 self.textedit = QTextEdit('歪日哦!') # 三种格式覆盖式输入及返回 # 普通文本覆盖 self.textedit.setText('普通文本覆盖哦!') # 纯文本覆盖 self.textedit.setPlainText('纯文本覆盖哦!') # 可通过 self.textedit.toPlainText() 返回文本框中纯文本信息 # Html文本覆盖 self.textedit.setHtml("<font color='red' size='6'> Html文本覆盖哦!</font>") # 可通过 self.textedit.toHtml() 返回文本框中Html文本信息 # 二种格式尾部追加式输入 # 普通文本追加 self.textedit.append('追加普通(纯)文本!') self.textedit.append("<font color='red' size='6'> 追加 Html 文本!</font>") self.setCentralWidget(self.textedit) self.show() def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if __name__ == '__main__': main()

3.1.1 基本设置

多行文本框 — QTextEdit
```python import sys from PyQt6.QtWidgets import from PyQt6.QtGui import from PyQt6.QtCore import * class QWindow(QMainWindow): def init(self): super().init() self.initUI() def initUI(self): self.textedit = QTextEdit() self.textedit.append(‘歪日’) # 设定占位文本 self.textedit.setPlaceholderText(‘占位文本’) # 可通过 self.textedit.placeholderText() 返回占位文本 # 设置文本对齐方式 self.textedit.setAlignment(Qt.AlignmentFlag.AlignCenter) # Qt.Alignment.AlignLeft 左对齐 # Qt.Alignment.AlignRight 右对齐 # Qt.Alignment.AlignHCenter 水平居中对齐 # Qt.Alignment.AlignJustify 自动调节 # Qt.Alignment.AlignTop 顶部对齐 # Qt.Alignment.AlignBottom 底部对齐 # Qt.Alignment.AlignVCenter 垂直居中对齐 # Qt.Alignment.AlignBaseline 基础线对齐 # Qt.Alignment.AlignCenter 居中对齐 等效于 AlignHCenter AlignVCenter self.setCentralWidget(self.textedit) self.show() def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if name == ‘main‘: main() ```

3.1.3 内容删除

多行文本框 — QTextEdit
python import sys from PyQt6.QtWidgets import * from PyQt6.QtGui import * class QWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # 创建并输入 # 创建多行文本框 self.textedit = QTextEdit() # 可通过参数设定文本框内容 self.textedit = QTextEdit('歪日哦!') # 三种格式覆盖式输入及返回 # 普通文本覆盖 self.textedit.setText('普通文本覆盖哦!') # 纯文本覆盖 self.textedit.setPlainText('纯文本覆盖哦!') # 可通过 self.textedit.toPlainText() 返回文本框中纯文本信息 # Html文本覆盖 self.textedit.setHtml("<font color='red' size='6'> Html文本覆盖哦!</font>") # 可通过 self.textedit.toHtml() 返回文本框中Html文本信息 # 二种格式尾部追加式输入 # 普通文本追加 self.textedit.append('追加普通(纯)文本!') self.textedit.append("<font color='red' size='6'> 追加 Html 文本!</font>") self.setCentralWidget(self.textedit) self.show() def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if __name__ == '__main__': main()

3.2 光标

3.2.1 光标移动

多行文本框 — QTextEdit
python import sys from PyQt6.QtWidgets import * from PyQt6.QtGui import * from PyQt6.QtCore import * class QWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.textedit = QTextEdit() for i in range(10): self.textedit.append('0'*30) # 获得文本光标(初始位置为起点) self.tc = self.textedit.textCursor() # 光标移动 self.tc.movePosition(QTextCursor.MoveOperation.Start, QTextCursor.MoveMode.MoveAnchor) # 移动方式 # QTextCursor.MoveOperation.NoMove 保持原处 # QTextCursor.MoveOperation.Start 到组件首 # QTextCursor.MoveOperation.StartOfLine 到行首 # QTextCursor.MoveOperation.StartOfBlock 到块首(行) # QTextCursor.MoveOperation.StartOfWord 到单词首 # QTextCursor.MoveOperation.PreviousBlock 到上一个块首(行) # QTextCursor.MoveOperation.PreviousCharacter 向左移动一个字符 # QTextCursor.MoveOperation.PreviousWord 到单词首 # QTextCursor.MoveOperation.Up 到上一行首 # QTextCursor.MoveOperation.Left 向左移动一个字符 # QTextCursor.MoveOperation.WordLeft 到单词首 # QTextCursor.MoveOperation.End 到组件尾 # QTextCursor.MoveOperation.EndOfLine 到行尾 # QTextCursor.MoveOperation.EndOfWord 到单词尾 # QTextCursor.MoveOperation.EndOfBlock 到块尾(行) # QTextCursor.MoveOperation.NextBlock 到下一个块首(行) # QTextCursor.MoveOperation.NextCharacter 向右移动一个字符 # QTextCursor.MoveOperation.NextWord 到单词尾 # QTextCursor.MoveOperation.Down 到下一行首 # QTextCursor.MoveOperation.Right 向右移动一个字符 # QTextCursor.MoveOperation.WordRight 到单词尾 # QTextCursor.MoveOperation.NextCell 到下一个单元格 # QTextCursor.MoveOperation.PreviousCell 到上一个单元格 # QTextCursor.MoveOperation.NextRow 到下一行第一个单元格 # QTextCursor.MoveOperation.PreviousRow 到上一行最后一个单元格 # 移动模式 # QTextCursor.MoveMode.MoveAnchor 锚点跟随移动(移动位置) # QTextCursor.MoveMode.KeepAnchor 锚点保持原位(画选区域) # 判断光标位置是否在组件首 print(self.tc.atStart()) # 返回:True # 判断光标位置是否在组件尾 print(self.tc.atEnd()) # 返回:False # 判断光标位置是否在块首 print(self.tc.atBlockStart()) # 返回:True # 判断光标位置是否在块尾 print(self.tc.atBlockEnd()) # 返回:False self.tc.insertText('1') self.setCentralWidget(self.textedit) self.show() def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if __name__ == '__main__': main()

3.2.2 光标插文本(不带换行)

多行文本框 — QTextEdit
python import sys from PyQt6.QtWidgets import * from PyQt6.QtGui import * from PyQt6.QtCore import * class QWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.textedit = QTextEdit() self.tc = self.textedit.textCursor() # 光标插入文本 # 光标处插入纯文本 self.textedit.insertPlainText('光标处插入纯文本\n') # 光标处插入Html文本 self.textedit.insertHtml("<font color='red' size='6'> 光标处插入Html文本</font>" + '\n') # 文本格式对象 # 创建文本格式对象 tcf = QTextCharFormat() # 文本字体 tcf.setFontFamily('Calibri') # 文本字体大小 tcf.setFontPointSize(20) # 光标处插入格式化文本 self.tc.insertText('光标处插入格式化文本\n',tcf) # 创建文本片段 # 创建纯文本片段 tdf1 = QTextDocumentFragment().fromPlainText('光标处插入纯文本片段\n') # 光标处插入纯文本 self.tc.insertFragment(tdf1) # 在 QTextCharFormat 后的纯文本也会延用 QTextCharFormat 的格式 # 创建html文本片段 tdf2 = QTextDocumentFragment().fromHtml("<font color='red' size='6'> 光标处插入Html文本片段</font>" + '\n') # 光标处插入纯文本 self.tc.insertFragment(tdf2) self.setCentralWidget(self.textedit) self.show() def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if __name__ == '__main__': main()

3.2.3 光标插图片

多行文本框 — QTextEdit
python import sys from PyQt6.QtWidgets import * from PyQt6.QtGui import * from PyQt6.QtCore import * class QWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.textedit = QTextEdit() self.tc = self.textedit.textCursor() # 光标处插入图片 # 创建图片格式片段 tif = QTextImageFormat() # 设置图片路径 tif.setName('image\exit.png') # 设置图片高度 tif.setHeight(50) # 设置图片宽度 tif.setWidth(50) # 插入图片 self.tc.insertImage(tif) # 可通过 self.tc.insertImage('image\exit.png') 直接插入图片,但无法修改尺寸 # 也可通过 self.tc.insertImage(tif, QTextFrameFormat) 按格式插入图片 self.setCentralWidget(self.textedit) self.show() def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if __name__ == '__main__': main()

3.2.4 光标插列表

多行文本框 — QTextEdit
python import sys from PyQt6.QtWidgets import * from PyQt6.QtGui import * from PyQt6.QtCore import * class QWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.textedit = QTextEdit() self.textedit.append('\n') self.tc = self.textedit.textCursor() self.tc.movePosition(QTextCursor.MoveOperation.Up, QTextCursor.MoveMode.MoveAnchor) # 光标处插入列表 # 插入列表符号 self.tc.createList(QTextListFormat.Style.ListCircle) # self.tc.createList 使用光标所在行格式 # self.tc.insertList 使用光标所在行格式 # QTextListFormat.Style.ListDisc 实心圆点 # QTextListFormat.Style.ListCircle 空心圆点 # QTextListFormat.Style.ListSquare 实心正方形 # QTextListFormat.Style.ListDecimal 数字 # QTextListFormat.Style.ListLowerAlpha 小写拉丁字符 # QTextListFormat.Style.ListUpperAlpha 大写拉丁字符 # QTextListFormat.Style.ListLowerRoman 小写罗马字符 # QTextListFormat.Style.ListUpperRoman 大写罗马字符 self.tc.insertText('第一条:\n') self.tc.insertText('第二条:\n') self.tc.insertText('第三条:') # 之所以前后调整一下(17、20、41)是因为我还不会如何终止列表格式,所以通过移动光标再插入的形式实现,部分文本为列表 self.tc.movePosition(QTextCursor.MoveOperation.Down, QTextCursor.MoveMode.MoveAnchor) self.textedit.append('......') self.setCentralWidget(self.textedit) self.show() def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if __name__ == '__main__': main()

3.2.5 光标插表格

多行文本框 — QTextEdit
python import sys from PyQt6.QtWidgets import * from PyQt6.QtGui import * from PyQt6.QtCore import * class QWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.textedit = QTextEdit() # 文本光标 # 获得文本光标(初始位置为起点) self.tc = self.textedit.textCursor() # 光标处插入表格 # 插入表格(行,列) self.tc.insertTable(10,5) # 创建表格格式 ttf = QTextTableFormat() # 设置单元格内边框与文本间距 ttf.setCellPadding(10) # 设置单元格线宽 ttf.setCellSpacing(10) # 设置表格在组件中对齐模式 ttf.setAlignment(Qt.AlignmentFlag.AlignHCenter) # Qt.Alignment.AlignLeft 左对齐 # Qt.Alignment.AlignRight 右对齐 # Qt.Alignment.AlignHCenter 居中对齐 # Qt.Alignment.AlignJustify 自动调节 self.tc.movePosition(QTextCursor.MoveOperation.End, QTextCursor.MoveMode.MoveAnchor) # 光标处插入格式表格 self.tc.insertTable(10,5,ttf) # 其他 # 设定占位文本 self.textedit.setPlaceholderText('占位文本') # 可通过 self.textedit.placeholderText() 输入占位文本 self.btn1 = QPushButton('清除文本') self.btn1.clicked.connect(self.clearall) hbox = QHBoxLayout() hbox.addWidget(self.btn1) vbox = QVBoxLayout() vbox.addWidget(self.textedit) vbox.addLayout(hbox) widget = QWidget() widget.setLayout(vbox) self.setCentralWidget(widget) self.show() def clearall(self): # 文本清除 self.textedit.clear() def main(): app = QApplication(sys.argv) ex = QWindow() sys.exit(app.exec()) if __name__ == '__main__': main()

DLC

DLC — Markdown 编辑界面
QTextEdit详细操作-凌的博客 PyQt5系列教程(34):书写我要Markdown(QTextEdit的使用)