QTextEdit 是 PyQt 中一个强大的文本编辑控件,它支持多种文本输入和显示功能,包括但不限于纯文本、富文本、HTML 和图像等。
QTextEdit 的主要功能
-
支持多种文本格式:
- 纯文本(Plain Text):简单的无格式文本,可以通过 setPlainText() 或 toPlainText() 方法设置或获取。
- 富文本(Rich Text):支持 HTML 格式文本,可以通过
setHtml()或toHtml()方法操作。
-
文本编辑功能:
- 支持插入、删除、替换等文本操作。
- 提供撤销(Undo)和重做(Redo)功能。
- 支持文本查找和替换。
-
输入和显示图片:
- 可以插入图片作为内容,支持拖放图片到编辑框。
-
格式化文本:
- 设置字体、颜色、对齐方式、段落样式等。
- 可以使用
QTextCursor对文本进行精细化操作。
-
只读模式:
- 可以设置为只读模式,防止用户编辑。
QTextEdit 的常用方法
-
文本设置与获取:
setPlainText("text"):设置纯文本。toPlainText():获取纯文本。setHtml("<b>Bold Text</b>"):设置富文本(HTML 格式)。toHtml():获取当前文本内容的 HTML 表示。
-
文本格式化:
- 使用
QTextCursor:cursor = text_edit.textCursor() cursor.insertText("Formatted Text")
- 使用
-
设置占位符(Placeholder Text):
- 用于提示用户输入内容:
text_edit.setPlaceholderText("Enter your text here...")
- 用于提示用户输入内容:
-
只读模式:
- 设置只读:
text_edit.setReadOnly(True) - 取消只读:
text_edit.setReadOnly(False) - 判断是否只读:text_edit.isReadOnly()
- 设置只读:
-
信号与槽:
- 文本内容变化信号:
textChanged。 - 光标位置变化信号:
cursorPositionChanged。
- 文本内容变化信号:
简单示例
import sys
from PyQt6.QtWidgets import *
class Window(QWidget):
def __init__(self):
super().__init__()
# 设置窗口
self.resize(400, 300)
# QTextEdit
self.text = QTextEdit(self)
self.text.setPlaceholderText("请输入文本")
# button
self.button1 = QPushButton("获取文本", self)
self.button1.clicked.connect(self.get_text)
self.button2 = QPushButton("清空文本", self)
# 信号 槽绑定
self.button2.clicked.connect(self.text.clear)
self.button3 = QPushButton("可写", self)
self.button3.clicked.connect(self.set_mod)
self.text.textChanged.connect(lambda: print(f'内容改变: {self.text.toPlainText()}'))
self.text.cursorPositionChanged.connect(self.get_cursor)
# 查找字符串
self.line_edit1 = QLineEdit()
self.line_edit1.setPlaceholderText("输入字符串进行查找")
self.button4 = QPushButton("查找", self)
self.button4.clicked.connect(self.find_str)
# 混合布局
v_layout = QVBoxLayout()
h_layout = QHBoxLayout()
h_layout1 = QHBoxLayout()
v_layout.addWidget(self.text)
h_layout.addWidget(self.button1)
h_layout.addWidget(self.button2)
h_layout.addWidget(self.button3)
h_layout1.addWidget(self.line_edit1)
h_layout1.addWidget(self.button4)
v_layout.addLayout(h_layout)
v_layout.addLayout(h_layout1)
# 应用布局
self.setLayout(v_layout)
# PlainText 纯文本
def get_text(self):
data = self.text.toPlainText()
print(f"文本内容:{data}")
# 设置文本只读
def set_mod(self):
mod = self.text.isReadOnly()
if mod:
self.text.setReadOnly(False)
self.button3.setText("可写")
else:
self.text.setReadOnly(True)
self.button3.setText("只读")
def find_str(self):
# 从QTextEdit 复制字符串进行查找,会失败,进行处理
text_content = self.text.toPlainText().replace("\n", " ").strip() # 清理文本内容
self.text.setPlainText(text_content)
# 获取输入的字符串
search = self.line_edit1.text()
# 查找字符串
found = self.text.find(search)
if found:
print("找到了")
else:
print("未找到")
# 操作光标
def get_cursor(self):
cursor = self.text.textCursor()
print(f'行号: {cursor.blockNumber()+1} 列号: {cursor.columnNumber()+1}')
if cursor.selectedText():
print(f'选中的部分:\n{cursor.selectedText()}')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec())
6014

被折叠的 条评论
为什么被折叠?



