PyQt5-QPlainTextEdit 学习笔记

第二章 控件学习


一、QPlainTextEdit 基础认知

        QPlainTextEdit 是 PyQt/PySide 框架中用于处理纯文本的高效控件,它专为大量文本内容设计,比 QTextEdit 更轻量级且性能更优,适合实现编辑器、日志查看器等场景。

二、最简单的 QPlainTextEdit 实现

下面是创建 QPlainTextEdit 并显示的基础案例:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPlainTextEdit

# 创建应用实例
app = QApplication(sys.argv)

# 创建主窗口
window = QMainWindow()
window.setWindowTitle("QPlainTextEdit 示例")
window.setGeometry(100, 100, 800, 600)

# 创建 QPlainTextEdit 实例
text_edit = QPlainTextEdit()
text_edit.setPlaceholderText("请输入文本...")  # 设置占位文本

# 设置为窗口中央部件
window.setCentralWidget(text_edit)

# 显示窗口
window.show()

# 进入应用主循环
sys.exit(app.exec_())

代码解读:

  1. 导入必要模块(应用、窗口、文本编辑控件)
  2. 创建应用和窗口,设置基本属性
  3. 实例化 QPlainTextEdit 并设置占位文本(未输入时显示)
  4. 将文本编辑框设为窗口中央部件
  5. 显示窗口并进入事件循环

三、核心功能与实用案例

1. 文本内容操作

# 设置文本内容
text_edit.setPlainText("这是一段纯文本内容")

# 获取文本内容
content = text_edit.toPlainText()
print("文本内容:", content)

# 追加文本
text_edit.appendPlainText("\n追加的新行文本")

# 清空文本
text_edit.clear()

2. 只读模式与格式设置

# 设置为只读模式(用于显示日志等场景)
text_edit.setReadOnly(True)

# 设置字体
from PyQt5.QtGui import QFont
font = QFont("Consolas", 10)  # 等宽字体适合代码/日志
text_edit.setFont(font)

# 设置文本行数(适合代码编辑器)
text_edit.setLineWrapMode(QPlainTextEdit.NoWrap)  # 不自动换行

3. 光标控制与选择

from PyQt5.QtGui import QTextCursor

# 获取光标
cursor = text_edit.textCursor()

# 移动光标到文本末尾
cursor.movePosition(QTextCursor.End)
text_edit.setTextCursor(cursor)

# 选择文本
cursor.movePosition(QTextCursor.StartOfLine)
cursor.movePosition(QTextCursor.EndOfLine, QTextCursor.KeepAnchor)
text_edit.setTextCursor(cursor)  # 应用选择

# 在光标位置插入文本
cursor.insertText("插入的文本")

4. 信号与事件处理

# 文本改变时触发
text_edit.textChanged.connect(lambda: print("文本已修改"))

# 光标位置改变时触发
text_edit.cursorPositionChanged.connect(lambda: print("光标位置已改变"))

# 右键菜单事件(自定义菜单)
text_edit.setContextMenuPolicy(Qt.CustomContextMenu)
text_edit.customContextMenuRequested.connect(self.show_context_menu)

def show_context_menu(self, position):
    menu = text_edit.createStandardContextMenu()  # 创建标准菜单
    # 添加自定义菜单项
    menu.addAction("自定义操作")
    menu.exec_(text_edit.mapToGlobal(position))

四、实用场景案例

1. 简易代码编辑器

import sys
from PyQt5.QtGui import QFont, QColor, QTextCharFormat, QSyntaxHighlighter
from PyQt5.QtCore import Qt, QRegularExpression
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPlainTextEdit, QFileDialog,
                            QAction, QMessageBox, QMenuBar, QToolBar, QStatusBar)
from PyQt5.QtGui import QFont  # 从QtGui模块导入QFont

class PythonHighlighter(QSyntaxHighlighter):
    """Python语法高亮器"""

    def __init__(self, document):
        super().__init__(document)

        # 定义语法规则和对应的格式
        self.rules = []

        # 关键字
        keywords = [
            'and', 'assert', 'break', 'class', 'continue', 'def',
            'del', 'elif', 'else', 'except', 'False', 'finally',
            'for', 'from', 'global', 'if', 'import', 'in', 'is',
            'lambda', 'None', 'nonlocal', 'not', 'or', 'pass',
            'raise', 'return', 'True', 'try', 'while', 'with', 'yield'
        ]

        # 函数
        functions = r'\b[A-Za-z0-9_]+(?=\()'

        # 字符串
        string1 = r'\'.*?\''
        string2 = r'\".*?\"'

        # 注释
        comment = r'#.*$'

        # 设置格式
        keyword_format = QTextCharFormat()
        keyword_format.setForeground(QColor(127, 0, 85))
        keyword_format.setFontWeight(QFont.Bold)

        function_format = QTextCharFo
### PyQt5pyqt5-tools版本冲突问题分析 在配置 VSCode 使用 PyQt5QtDesigner 时,可能会遇到 `pyqt5-tools` 的版本冲突问题。此问题通常源于 `pyqt5-tools` 包中包含的 PyQt5 版本与用户单独安装的 PyQt5 版本不一致[^1]。 当使用 `pip install pyqt5-tools` 安装工具包时,它会自动安装一个特定版本的 PyQt5。如果项目中已经安装了不同版本的 PyQt5,则可能导致版本冲突。例如,某些功能可能依赖于特定版本的 PyQt5,而 `pyqt5-tools` 提供的版本可能不兼容[^2]。 ### 解决方案 #### 方法一:统一版本 确保 `pyqt5-tools` 和 PyQt5 的版本一致。可以通过以下命令检查当前已安装的版本: ```bash pip show pyqt5 pyqt5-tools ``` 若发现版本不一致,可以卸载现有的 `pyqt5-tools` 和 PyQt5,并重新安装指定版本: ```bash pip uninstall pyqt5 pyqt5-tools pip install pyqt5==5.15.7 pyqt5-tools==5.15.2.3.2 ``` 注意,这里选择的版本号需要根据实际需求和兼容性测试结果调整[^3]。 #### 方法二:仅安装必要组件 如果不需要 `pyqt5-tools` 提供的所有功能,可以选择单独安装 PyQt5QtDesigner。通过以下命令安装: ```bash pip install pyqt5 pip install qt5-applications ``` 然后手动配置 QtDesigner 的路径。具体操作为: 1. 查找 `designer.exe` 或 `designer` 的位置(通常位于 `site-packages\qt5_applications\bin`)。 2. 在 VSCode 中设置 QtDesigner 的启动路径。 #### 方法三:虚拟环境隔离 为了避免全局环境中不同项目的依赖冲突,建议为每个项目创建独立的虚拟环境。步骤如下: 1. 创建虚拟环境: ```bash python -m venv myenv ``` 2. 激活虚拟环境: ```bash myenv\Scripts\activate ``` 3. 在虚拟环境中安装所需的依赖: ```bash pip install pyqt5 qt5-applications ``` ### 示例代码:VSCode 配置示例 在 VSCode 中配置 PyQt5QtDesigner 的运行环境时,可以在 `settings.json` 文件中添加以下内容: ```json { "python.pythonPath": "myenv\\Scripts\\python.exe", "terminal.integrated.env.windows": { "PATH": "${workspaceFolder}\\myenv\\Scripts" } } ``` 上述配置确保 VSCode 使用正确的 Python 解释器和路径[^4]。 ### 注意事项 - 如果仍然遇到问题,可以尝试清理缓存或重新安装相关依赖。 - 确保操作系统支持所选的 PyQt5 和 `pyqt5-tools` 版本。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寄思~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值