PyQt 文本编辑框控件QTextEdit

QTextEdit 是 PyQt 中一个强大的文本编辑控件,它支持多种文本输入和显示功能,包括但不限于纯文本、富文本、HTML 和图像等。


QTextEdit 的主要功能

  • 支持多种文本格式:

    • 纯文本(Plain Text):简单的无格式文本,可以通过 setPlainText() 或 toPlainText() 方法设置或获取。
    • 富文本(Rich Text):支持 HTML 格式文本,可以通过 setHtml() 或 toHtml() 方法操作。
  • 文本编辑功能:

    • 支持插入、删除、替换等文本操作。
    • 提供撤销(Undo)和重做(Redo)功能。
    • 支持文本查找和替换。
  • 输入和显示图片:

    • 可以插入图片作为内容,支持拖放图片到编辑框。
  • 格式化文本:

    • 设置字体、颜色、对齐方式、段落样式等。
    • 可以使用 QTextCursor 对文本进行精细化操作。
  • 只读模式:

    • 可以设置为只读模式,防止用户编辑。

QTextEdit 的常用方法

  1. 文本设置与获取

    • setPlainText("text"):设置纯文本。
    • toPlainText():获取纯文本。
    • setHtml("<b>Bold Text</b>"):设置富文本(HTML 格式)。
    • toHtml():获取当前文本内容的 HTML 表示。
  2. 文本格式化

    • 使用 QTextCursor
      cursor = text_edit.textCursor()
      cursor.insertText("Formatted Text")
      
  3. 设置占位符(Placeholder Text)

    • 用于提示用户输入内容:
      text_edit.setPlaceholderText("Enter your text here...")
      
  4. 只读模式

    • 设置只读:text_edit.setReadOnly(True)
    • 取消只读:text_edit.setReadOnly(False)
    • 判断是否只读:text_edit.isReadOnly()
  5. 信号与槽

    • 文本内容变化信号: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())

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值