PySide6 GUI 学习笔记——常用类及控件使用方法(多行文本控件QTextEdit)

news2025/6/9 23:48:23

文章目录

  • PySide6.QtWidgets.QTextEdit 应用举例
    • 概述
    • 核心特性
    • 常用方法
      • 文本内容操作
      • 光标和选择操作
      • 格式和样式
      • 查找功能
      • 视图控制
      • 状态设置
      • 常用信号
    • 代码示例
    • 示例说明
      • 1. 基本设置
      • 2. 文本格式化功能
      • 3. 功能按钮
      • 4. 信号处理

PySide6.QtWidgets.QTextEdit 应用举例

概述

QTextEditPySide6 中用于编辑和显示纯文本和富文本的控件。它提供了强大的文本处理能力,支持 HTML 样式标签和 Markdown 格式,能够处理大型文档并快速响应用户输入。

核心特性

  • 支持纯文本和富文本(HTML 4 子集)编辑

  • Markdown 格式支持

  • 自动换行和格式控制

  • 撤销/重做功能

  • 查找替换功能

  • 自定义拖放操作

  • 多种编辑和只读模式键盘快捷键

常用方法

文本内容操作

方法描述
setPlainText(text: str)设置纯文本内容
toPlainText() -> str获取纯文本内容
setHtml(html: str)设置 HTML 内容
toHtml() -> str获取 HTML 内容
setMarkdown(markdown: str)设置 Markdown 内容
toMarkdown() -> str获取 Markdown 内容
clear()清空所有内容
append(text: str)在文档末尾追加新段落

光标和选择操作

方法描述
textCursor() -> QTextCursor获取当前光标
setTextCursor(QTextCursor)设置当前光标
cursorForPosition(QPoint) -> QTextCursor获取指定位置的光标
cursorRect() -> QRect获取光标矩形区域
selectAll()全选所有文本
copy()复制选中内容
cut()剪切选中内容
paste()粘贴内容

格式和样式

方法描述
setAlignment(Qt.Alignment)设置段落对齐方式
setFontFamily(family: str)设置字体族
setFontPointSize(size: float)设置字体大小(磅值)
setFontWeight(weight: int)设置字体粗细
setFontItalic(italic: bool)设置斜体
setFontUnderline(underline: bool)设置下划线
mergeCurrentCharFormat(QTextCharFormat)合并当前字符格式

查找功能

方法描述
find(pattern: str, options: QTextDocument.FindFlags) -> bool查找文本模式

视图控制

方法描述
ensureCursorVisible()确保光标可见
scrollToAnchor(name: str)滚动到指定锚点

状态设置

方法描述
setReadOnly(ro: bool)设置只读模式
setPlaceholderText(text: str)设置占位文本
setLineWrapMode(mode: QTextEdit.LineWrapMode)设置换行模式
setLineWrapColumnOrWidth(width: int)设置换行宽度/列数

常用信号

信号描述
textChanged()文本内容改变时触发
cursorPositionChanged()光标位置改变时触发
selectionChanged()选择区域改变时触发
copyAvailable(bool)复制可用状态改变时触发
redoAvailable(bool)重做可用状态改变时触发
undoAvailable(bool)撤销可用状态改变时触发

代码示例

import sys
from PySide6.QtWidgets import (
    QApplication, QMainWindow, QTextEdit, 
    QVBoxLayout, QWidget, QPushButton
)
from PySide6.QtGui import QTextCharFormat, QFont, QColor
from PySide6.QtCore import Qt

class TextEditorDemo(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QTextEdit 示例")
        self.setGeometry(100, 100, 800, 600)
        
        # 创建主控件和布局
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout(central_widget)
        
        # 创建文本编辑器
        self.text_edit = QTextEdit()
        self.text_edit.setPlaceholderText("在此输入内容...")
        self.text_edit.setLineWrapMode(QTextEdit.WidgetWidth)
        layout.addWidget(self.text_edit, 1)
        
        # 创建按钮面板
        button_layout = self.create_button_panel()
        layout.addLayout(button_layout)
        
        # 连接信号
        self.text_edit.textChanged.connect(self.on_text_changed)
        self.text_edit.cursorPositionChanged.connect(self.on_cursor_moved)
    
    def create_button_panel(self):
        from PySide6.QtWidgets import QHBoxLayout
        
        button_layout = QHBoxLayout()
        
        # 格式按钮
        btn_bold = QPushButton("粗体")
        btn_bold.clicked.connect(self.toggle_bold)
        button_layout.addWidget(btn_bold)
        
        btn_italic = QPushButton("斜体")
        btn_italic.clicked.connect(self.toggle_italic)
        button_layout.addWidget(btn_italic)
        
        btn_color = QPushButton("颜色")
        btn_color.clicked.connect(self.change_color)
        button_layout.addWidget(btn_color)
        
        # 功能按钮
        btn_clear = QPushButton("清空")
        btn_clear.clicked.connect(self.text_edit.clear)
        button_layout.addWidget(btn_clear)
        
        btn_html = QPushButton("获取HTML")
        btn_html.clicked.connect(self.print_html)
        button_layout.addWidget(btn_html)
        
        return button_layout
    
    def toggle_bold(self):
        fmt = QTextCharFormat()
        fmt.setFontWeight(QFont.Bold if not self.text_edit.fontWeight() > QFont.Normal else QFont.Normal)
        self.text_edit.mergeCurrentCharFormat(fmt)
    
    def toggle_italic(self):
        fmt = QTextCharFormat()
        fmt.setFontItalic(not self.text_edit.fontItalic())
        self.text_edit.mergeCurrentCharFormat(fmt)
    
    def change_color(self):
        fmt = QTextCharFormat()
        fmt.setForeground(QColor("blue"))
        self.text_edit.mergeCurrentCharFormat(fmt)
    
    def on_text_changed(self):
        print("文本内容已更改")
    
    def on_cursor_moved(self):
        print(f"光标位置: {self.text_edit.textCursor().position()}")
    
    def print_html(self):
        html = self.text_edit.toHtml()
        print("HTML内容:")
        print(html[:200] + "..." if len(html) > 200 else html)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = TextEditorDemo()
    window.show()
    sys.exit(app.exec())

运行效果:
运行效果

示例说明

1. 基本设置

  • 创建主窗口和布局

  • 添加 QTextEdit 控件并设置占位文本和换行模式

  • 连接文本变化和光标移动信号

2. 文本格式化功能

  • 粗体/斜体切换按钮

  • 更改文本颜色功能

  • 通过 QTextCharFormat 和 mergeCurrentCharFormat 应用格式

3. 功能按钮

  • 清空编辑器内容

  • 打印当前内容的 HTML 表示

  • 获取纯文本内容

4. 信号处理

  • 监听文本变化事件

  • 跟踪光标位置变化

这个示例展示了 QTextEdit 的核心功能,包括文本编辑、格式控制、内容获取和信号处理。您可以根据需要扩展功能,如添加查找替换、Markdown支持或自定义拖放操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2405988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【版本控制】Git 和 GitHub 入门教程

目录 0 引言1 Git与GitHub的诞生1.1 Git:Linus的“两周奇迹”,拯救Linux内核1.2 GitHub:为Git插上协作的翅膀1.3 协同进化:从工具到生态的质变1.4 关键历程时间轴(2005–2008) 2 Git与GitHub入门指南2.1 Gi…

基于python大数据的水文数据分析可视化系统

博主介绍:高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在…

人工智能学习09-变量作用域

人工智能学习概述—快手视频 人工智能学习09-变量作用域—快手视频

DJango知识-模型类

一.项目创建 在想要将项目创键的目录下,输入cmd (进入命令提示符)在cmd中输入:Django-admin startproject 项目名称 (创建项目)cd 项目名称 (进入项目)Django-admin startapp 程序名称 (创建程序)python manage.py runserver 8080 (运行程序)将弹出的网址复制到浏览器中…

【Redis】笔记|第10节|京东HotKey实现多级缓存架构

缓存架构 京东HotKey架构 代码结构 代码详情 功能点:(如代码有错误,欢迎讨论纠正) 多级缓存,先查HotKey缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新…

基于规则的自然语言处理

基于规则的自然语言处理 规则方法形态还原(针对英语、德语、法语等)中文分词切分歧义分词方法歧义字段消歧方法分词带来的问题 词性标注命名实体分类机器翻译规则方法的问题 规则方法 以规则形式表示语言知识,强调人对语言知识的理性整理&am…

使用MounRiver Studio Ⅱ软件写一个CH592F芯片的ADC采集程序,碰到的问题

MounRiver Studio Ⅱ 默认是不开启浮点计算的,所以有些浮点功能不能用,碰到问题是 while (1) {DelayMs (100);tmp Read_Temperature (0);sprintf (tempBuffer, "temp:%.2f\r\n", tmp); // 格式化温度值到字符串。使用%f要开启相应的…

简约商务年终工作总结报告PPT模版分享

简约精致扁平化商务通用动画PPT模版,简约大气素雅商务PPT模版,商务PPT模版,商业计划书PPT模版,IOS风商务通用PPT模版,公司介绍企业宣传PPT模版,创业融资PPT模版,创意低多边形PPT模版&#xff0c…

深度学习学习率优化方法——pytorch中各类warm up策略

warm-up具体原理以及为什么这么做在之前的博客有介绍,这里直接介绍如何直接使用pytorch中的warm-up策略,在pytorch中对于warm-up所有支持的方法都有描述,可以直接阅读1。 深度学习中各类学习率优化方法(AdaGrad/RMSprop/Adam/Warm-UP)原理及其…

分类数据集 - 场景分类数据集下载

数据集介绍:自然场景分类数据集,真实场景高质量图片数据;适用实际项目应用:自然场景下场景分类项目,以及作为通用场景分类数据集场景数据的补充;数据集类别:buildings、forest、glacier、mounta…

leetcode.多数元素

169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; import java.util.HashMap;public class LeetCode169 {public int majorityElement(int[] nums) {int count nums.length;int res count/2;Scanner scanner new Scanner(System.in);HashMap<Integer,Integer> …

Server - 使用 Docker 配置 PyTorch 研发环境

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/148421901 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 建议使…

2025年渗透测试面试题总结-腾讯[实习]安全研究员(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]安全研究员 1. 自我介绍 2. SQL二次注入原理 3. 二次注入修复方案 4. SQL注入绕WAF&#xff…

01-VMware16虚拟机详细安装

官网地址&#xff1a;https://www.vmware.com/cn.html 1.1 打开下载好的 .exe 文件&#xff0c; 双击安装。 1.2 点击下一步 1.3 先勾选我接受许可协议中的条款&#xff0c;然后点击下一步 1.4 自定义安装路径&#xff0c;注意这里的文件路径尽量不要包含中文&#xff0c;完成…

sql列中数据通过逗号分割的集合,按需求剔除部分值

前置 不会REGEXP 方法的需要在这里学习一下下 记sql字段逗号分隔&#xff0c;通过list查询 功能点 现有一个表格中一列存储的是标签的集合&#xff0c;通过逗号分割 入下&#xff1a; 其中tag_ids是逗号分割的标签&#xff0c;现在需要删除标签组中的一些标签&#xff0c;因…

下一代设备健康管理解决方案:基于多源异构数据融合的智能运维架构

导语&#xff1a; 在工业4.0深度演进的关键节点&#xff0c;传统设备管理面临数据孤岛、误诊率高、运维滞后三大致命瓶颈。本文解析基于边缘智能与数字孪生的新一代解决方案架构&#xff0c;并实测验证中讯烛龙PHM-X系统如何通过多模态感知→智能诊断→自主决策闭环&#xff0c…

深入理解JavaScript设计模式之闭包与高阶函数

目录 前言小序一场失败面试面试后的觉醒 闭包变量作用域&#xff1a;谁的地盘听谁的变量的生命周期&#xff1a;该走了&#xff0c;不该走的还在闭包的更多作用&#xff1a;不只是谈恋爱&#xff0c;还能干活&#xff01;1、封装私有变量&#xff1a;你的变量我来守护2、延长变…

springboot启动mapper找不到方法对应的xml

数据源配置 目录结构 idea中mapper.java 可以找到对应的mapper.xml文件 启动却找不到 因为mapper.db1会被识别为文件名 而非目录结构 调整为这种

MQTT协议:物联网时代的通信基石

MQTT协议&#xff1a;物联网时代的通信基石 在当今快速发展的物联网&#xff08;IoT&#xff09;时代&#xff0c;设备之间的通信变得尤为重要。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议作为一种轻量级的消息传输协议&#xff0c;正逐渐成为物联…

Electron通信流程

前言 今天讲Electron框架的通信流程&#xff0c;首先我们需要知道为什么需要通信。这得益于Electron的多进程模型&#xff0c;它主要模仿chrome的多进程模型如下图&#xff1a; 作为应用开发者&#xff0c;我们将控制两种类型的进程&#xff1a;主进程和渲染器进程 。 …