【PyQt】实现格式刷功能

news2025/2/11 9:33:16

实现格式刷功能

在Qt Designer中直接实现格式刷功能并不支持,但可以通过以下方法在应用程序中实现类似功能:

一、Qt Designer中的替代方案

1.手动设置样式表

在属性编辑器中复制样式表(QSS)内容,粘贴到其他控件。

2.使用样式继承

将控件放置在同一容器中,通过父控件样式表统一设置子控件样式

二、在应用程序中实现格式刷功能

以下是在PyQt/PySide中实现格式刷的代码示例:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

class FormatPainterApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.source_widget = None
        self.format_mode = False

        # 创建界面
        self.initUI()

    def initUI(self):
        # 添加格式刷按钮
        self.format_btn = QPushButton("格式刷", self)
        self.format_btn.clicked.connect(self.toggle_format_mode)
        self.format_btn.move(10, 10)

        # 示例控件
        self.label1 = QLabel("示例文本1", self)
        self.label1.setGeometry(50, 50, 100, 30)
        self.label1.setStyleSheet("background-color: yellow;")

        self.label2 = QLabel("示例文本2", self)
        self.label2.setGeometry(50, 100, 100, 30)

        self.button1 = QPushButton("按钮1", self)
        self.button1.setGeometry(50, 150, 100, 30)

    def toggle_format_mode(self):
        self.format_mode = not self.format_mode
        self.format_btn.setDown(self.format_mode)
        if self.format_mode:
            self.setCursor(Qt.CrossCursor)
        else:
            self.unsetCursor()

    def mousePressEvent(self, event):
        if self.format_mode:
            widget = self.childAt(event.pos())
            if widget and isinstance(widget, QWidget):
                if not self.source_widget:
                    # 记录源控件
                    self.source_widget = widget
                    print("源控件已选择:", widget)
                else:
                    # 应用样式到目标控件
                    self.apply_style(self.source_widget, widget)
                    self.source_widget = None
                    self.toggle_format_mode()  # 退出格式刷模式
        super().mousePressEvent(event)

    def apply_style(self, source, target):
        # 复制字体
        target.setFont(source.font())

        # 复制调色板
        target.setPalette(source.palette())

        # 复制样式表
        target.setStyleSheet(source.styleSheet())

        # 强制更新样式
        target.style().polish(target)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = FormatPainterApp()
    window.setGeometry(300, 300, 300, 250)
    window.show()
    sys.exit(app.exec_())

界面展示
在这里插入图片描述

三、实现原理说明

1.格式刷模式切换

通过按钮切换模式,使用setCursor改变鼠标图标提示状态。

2.样式复制

记录源控件的字体、调色板和样式表

通过apply_style方法将样式应用到目标控件

使用style().polish()强制刷新样式

3.注意事项

不同类型控件可能样式不兼容

复杂样式建议使用QSS类名(.class-name)统一管理

可扩展复制更多属性(如几何形状、尺寸策略等)

四、高级优化方向

1.批量应用

支持框选多个控件应用样式

2.样式存储

将常用样式保存为模板

3.撤销功能

通过命令模式实现样式修改的撤销/重做

建议在项目中使用集中式样式表(QSS文件)管理界面样式,以提高维护性。

/* styles.qss */
QPushButton {
    background-color: #4CAF50; /* Green */
    color: white;
    border: none;
    padding: 10px 20px;
    text-align: center;
    font-size: 16px;
}

QLineEdit {
    background-color: #f0f0f0;
    border: 2px solid #ccc;
    border-radius: 4px;
    padding: 5px;
}

QMainWindow {
    background-color: #E0E0E0;
}

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

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

相关文章

2025年日祭

本文将同步发表于洛谷(暂无法访问)、CSDN 与 Github 个人博客(暂未发布) 本蒟自2025.2.8开始半停课。 任务计划(站外题与专题) 数了一下,通过人数比较高的题,也就是我准备补的题&a…

Windows下AMD显卡在本地运行大语言模型(deepseek-r1)

Windows下AMD显卡在本地运行大语言模型 本人电脑配置第一步先在官网确认自己的 AMD 显卡是否支持 ROCm下载Ollama安装程序模型下载位置更改下载 ROCmLibs先确认自己显卡的gfx型号下载解压 替换替换rocblas.dll替换library文件夹下的所有 重启Ollama下载模型运行效果 本人电脑配…

el-table表格点击单元格实现编辑

使用 el-table 和 el-table-column 创建表格。在单元格的默认插槽中,使用 div 显示文本内容,单击时触发编辑功能。使用 el-input 组件在单元格中显示编辑框。data() 方法中定义了 tableData,tabClickIndex: null,tabClickLabel: ,用于判断是否…

数据库操作与数据管理——Rust 与 SQLite 的集成

第六章:数据库操作与数据管理 第一节:Rust 与 SQLite 的集成 在本节中,我们将深入探讨如何在 Rust 中使用 SQLite 数据库,涵盖从基本的 CRUD 操作到事务处理、数据模型的构建、性能优化以及安全性考虑等方面。SQLite 是一个轻量…

Ubuntu 24.10 安装Deepseek(Ollama+openwebui)

一、Ollama安装 1.在线安装 curl -fsSL https://ollama.com/install.sh | sh 如果curl工具没有安装先执行如下命令 sudo apt install curl 验证curl是否安装成功 curl --version 安装的过程中会提示输入当前系统登录用户的密码。 安装提示success后,验证安装 ollama -…

【漫话机器学习系列】084.偏差和方差的权衡(Bias-Variance Tradeoff)

偏差和方差的权衡(Bias-Variance Tradeoff) 1. 引言 在机器学习模型的训练过程中,我们常常面临一个重要的挑战:如何平衡 偏差(Bias) 和 方差(Variance),以提升模型的泛…

STM32的HAL库开发---高级定时器---输出比较模式实验

一、高级定时器输出比较模式实验原理 定时器的输出比较模式总共有8种,本文使用其中的翻转模式,当TIMXCCR1TIMXCNT时,翻转OC1REF的电平,OC1REF为输出参考信号,高电平有效,OC1REF信号连接到0C1上面&#xff…

[论文阅读] Knowledge Fusion of Large Language Models

Knowledge Fusion of Large Language Models (FuseLLM) Methodology 整体Pipeline如下图所示 不同的动物代表不同的LLM。左边第一,第二分别是Ensemble以及Weight Merging方法。最右侧为本文提出的FuseLLM。 Ensemble: 融合多个models的预测结果,比如…

elementui:el-table支持搜索、切换分页多选功能,以及数据回显

1、el-table相关代码&#xff0c;需注意:row-key"(row) > { return row.id }" 以及 :reserve-selection"true" <div class"boxList"><div class"search-form"><!-- 搜索表单 --><el-form :inline"true&q…

(ICLR=2025)生成的表征对齐:训练扩散Transformer比你想象的更简单

生成的表征对齐&#xff1a;训练扩散Transformer比你想象的更简单 paper是KAIST发表在ICLR 2025的工作 paper title:REPRESENTATION ALIGNMENT FOR GENERATION: TRAINING DIFFUSION TRANSFORMERS IS EASIER THAN YOU THINK Code&#xff1a;链接 ABSTRACT 最近的研究表明&…

白嫖RTX 4090?Stable Diffusion:如何给线稿人物快速上色?

大家都知道&#xff0c;在设计的初期&#xff0c;我们通常会先绘制草图&#xff0c;然后再进行上色处理&#xff0c;最终才开始进行最终的设计工作。在这个上色的过程中&#xff0c;配色是至关重要的一环。这不仅方便了内部同事的评审&#xff0c;也让产品方和客户可以直观地了…

Bash (Bourne-Again Shell)、Zsh (Z Shell)

文章目录 1. 历史背景2. 主要区别3. 功能对比自动补全插件和主题路径扩展提示符定制 4. 性能5. 使用场景6. 如何切换 Shell7. 总结 以下是 Bash 和 Zsh 之间的主要区别&#xff0c;列成表格方便对比&#xff1a; 特性BashZsh默认Shell大多数Linux发行版默认ShellmacOS默认She…

pikachu[皮卡丘] 靶场全级别通关教程答案 以及 学习方法 如何通过渗透测试靶场挑战「pikachu」来精通Web渗透技巧? 一篇文章搞完这些问题

目录 Pikachu靶场 部署 暴力破解漏洞 学习地址: 靶场练习: 基于表单的暴力破解 验证码绕过(on server) 验证码绕过(on Client) token防爆破? XSS跨站脚本攻击 学习地址: 靶场练习&#xff1a; 反射型xss(get) 反射性xss(post) 存储型xss DOM型xss xss盲打 x…

汽车零部件工厂如何借助安灯呼叫按钮盒提升生产响应速度

在现代汽车零部件工厂的生产环境中&#xff0c;高效的信息传递和快速的响应速度是确保生产顺畅运行的关键。然而&#xff0c;传统的口头呼喊或现场沟通方式往往存在信息传递慢、现场嘈杂、责任人难以及时找到等问题&#xff0c;尤其在设备故障或缺料时&#xff0c;这些问题会导…

Idea 2024.3 使用CodeGPT插件整合Deepseek

哈喽&#xff0c;大家好&#xff0c;我是浮云&#xff0c;最近国产大模型Deepseek异常火爆&#xff0c;作为程序员我也试着玩了一下&#xff0c;首先作为简单的使用&#xff0c;大家进入官网&#xff0c;点击开始对话即可进行简单的聊天使用&#xff0c;点击获取手机app即可安装…

「vue3-element-admin」告别 vite-plugin-svg-icons!用 @unocss/preset-icons 加载本地 SVG 图标

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

docker /var/lib/docker/overlay2目录把磁盘空间占满问题

1、查看服务器磁盘空间 df -h果然100%了,docker系统文件把磁盘空间占满了。 2、进入overlay2目录&#xff0c;查找那个容器工作目录占用最高 cd /var/lib/docker/overlay2du -h --max-depth1详见下图 好家伙占用110G&#xff01;复制目录名称2c3c48ccac533c5d4a366d45a19bb9…

Redis深入学习

目录 Redis是什么&#xff1f; Redis使用场景 Redis线程模型 Redis执行命令是单线程的为什么还这么快&#xff1f; Redis持久化 Redis 事务 Key 过期策略 Redis 和 mysql 如何保证数据一致&#xff1f; 缓存穿透 缓存击穿 缓存雪崩 Redis是什么&#xff1f; redis是一…

EasyExcel 导出合并层级单元格

EasyExcel 导出合并层级单元格 一、案例 案例一 1.相同订单号单元格进行合并 合并结果 案例二 1.相同订单号的单元格进行合并2.相同订单号的总数和总金额进行合并 合并结果 案例三 1.相同订单号的单元格进行合并2.相同订单号的商品分类进行合并3.相同订单号的总数和总金额…

青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要

青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要 一、Django 5Django 5 的主要特性包括&#xff1a; 二、MVT模式三、官方网站四、内置功能数据库 ORM&#xff08;对象关系映射&#xff09;用户认证和授权表单处理模板引擎URL 路由缓存框架国际化和本地化安全性功能管…