当前位置: 首页 > article >正文

【PyQt】工具栏(QToolBar)与动作按钮(QAction)使用指南

PyQt工具栏(QToolBar)与动作按钮(QAction)使用指南 🛠️

一、基础用法示例 🌟

class MainWindow(QMainWindow):def __init__(self):super().__init__()# 创建工具栏 🔧self.toolbar = self.addToolBar("主工具栏")# 创建动作集合 🎬self._create_actions()# 设置工具栏图标尺寸 📏self.toolbar.setIconSize(QSize(32, 32))def _create_actions(self):# 新建文件动作 📄self.new_action = QAction(QIcon("icons/new.png"), "新建", self)self.new_action.setShortcut("Ctrl+N")self.new_action.setStatusTip("创建新文件")self.new_action.triggered.connect(self.new_file)self.toolbar.addAction(self.new_action)# 添加分隔符 ➖self.toolbar.addSeparator()# 保存文件动作 💾self.save_action = QAction(QIcon("icons/save.png"), "保存", self)self.save_action.setShortcut("Ctrl+S")self.save_action.triggered.connect(self.save_file)self.toolbar.addAction(self.save_action)

二、完整功能实现 🚀

class AdvancedToolbarDemo(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):# 创建多个工具栏 🧰self.file_toolbar = self.addToolBar("文件")self.edit_toolbar = self.addToolBar("编辑")# 初始化动作 🎭self.init_actions()# 添加工具栏控件 🎛️self.add_tool_widgets()def init_actions(self):# 打开文件动作 📂self.open_action = QAction(QIcon("icons/open.png"), "打开文件", self)self.open_action.setShortcut("Ctrl+O")self.open_action.triggered.connect(self.open_file)self.file_toolbar.addAction(self.open_action)# 打印动作 🖨️self.print_action = QAction(QIcon("icons/print.png"), "打印", self)self.print_action.setEnabled(False)  # 初始禁用self.print_action.triggered.connect(self.print_document)self.file_toolbar.addAction(self.print_action)# 撤销/重做动作 🔄self.undo_action = QAction(QIcon("icons/undo.png"), "撤销", self)self.undo_action.triggered.connect(self.undo)self.edit_toolbar.addAction(self.undo_action)self.redo_action = QAction(QIcon("icons/redo.png"), "重做", self)self.redo_action.triggered.connect(self.redo)self.edit_toolbar.addAction(self.redo_action)def add_tool_widgets(self):# 添加组合框 🔘self.font_combo = QFontComboBox()self.edit_toolbar.addWidget(self.font_combo)# 添加颜色选择按钮 🎨self.color_btn = QToolButton()self.color_btn.setPopupMode(QToolButton.MenuButtonPopup)color_menu = QMenu(self)color_menu.addAction("红色", lambda: self.set_color(Qt.red))color_menu.addAction("蓝色", lambda: self.set_color(Qt.blue))self.color_btn.setMenu(color_menu)self.color_btn.setIcon(QIcon("icons/color.png"))self.edit_toolbar.addWidget(self.color_btn)# 添加切换按钮 🔘self.grid_toggle = QAction(QIcon("icons/grid.png"), "显示网格", self)self.grid_toggle.setCheckable(True)self.grid_toggle.toggled.connect(self.toggle_grid)self.edit_toolbar.addAction(self.grid_toggle)

三、关键功能说明 🔑

  1. 图标设置 🖼️
action.setIcon(QIcon("path/to/icon.png"))
  1. 快捷键绑定 ⌨️
action.setShortcut("Ctrl+Shift+S")
  1. 状态提示 💡
action.setStatusTip("保存当前文件")
  1. 启用/禁用控制 ⚙️
action.setEnabled(False)  # 禁用按钮
  1. 可检查状态
action.setCheckable(True)
action.toggled.connect(handler)

四、高级技巧 🚀

  1. 上下文菜单 🖱️
def contextMenuEvent(self, event):menu = QMenu(self)menu.addAction(self.new_action)menu.addAction(self.save_action)menu.exec_(event.globalPos())
  1. 工具栏定位 🧭
# 停靠位置设置
self.addToolBar(Qt.LeftToolBarArea, self.file_toolbar)
self.addToolBar(Qt.RightToolBarArea, self.edit_toolbar)# 浮动控制
self.file_toolbar.setFloatable(False)  # 禁止浮动
  1. 工具栏样式 🎨
# 设置工具按钮样式
self.toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)# 自定义样式表
self.toolbar.setStyleSheet("""QToolBar { background: #f0f0f0; }QToolButton { padding: 5px; }
""")

五、注意事项 ⚠️

  1. 图标资源 📁
    建议使用Qt资源系统(qrc文件)管理图标,避免路径问题

  2. 快捷键冲突 ⚔️
    使用QShortcut类管理全局快捷键

  3. 工具栏灵活性 🧩
    允许用户通过setMovable(True)自定义工具栏位置

  4. 状态保存 💾
    使用QSettings保存工具栏布局:

settings = QSettings("MyCompany", "MyApp")
settings.setValue("toolbarState", self.saveState())

相关文章:

【PyQt】工具栏(QToolBar)与动作按钮(QAction)使用指南

PyQt工具栏(QToolBar)与动作按钮(QAction)使用指南 🛠️ 一、基础用法示例 🌟 class MainWindow(QMainWindow):def __init__(self):super().__init__()# 创建工具栏 🔧self.toolbar self.addToolBar("主工具栏")# 创建动作集合 …...

软路由折腾 | OpenWrt安装后基础配置指南:联网设置与DNS优化

在PVE中安装OpenWrt教程 一、网络基础配置 1. 确认网络接口角色 OpenWrt旁路由通常仅需配置LAN口,无需WAN口。其流量通过主路由转发,因此需确保: 物理连接:OpenWrt的LAN口(如eth0)桥接到主路由的局域网&…...

设置默认构建变体 Build Variant

Android Studio在打开项目时有时会把我设置好的build Variant改为默认的变体,没注意的话可能打完包才发现打错了,浪费时间。因此,有必要通过代码设置一个我想要的默认变体。 代码其实很简单,只要在变体下面加上isDefault true即可…...

【大模型】DeepSeek使用与原理解析:从V3到R1

文章目录 一、引言二、使用与测评1.7大R1使用技巧2.官网实测 发展历程三、Deepseek MoE:专家负载均衡 (2024年1月)四、GRPO:群体相对策略优化(DeepSeek-Math,2024年4月)五、三代注意力&#xff…...

DAY04 Object、Date类、DateFormat类、Calendar类、Math类、System类

学习目标 能够说出Object类的特点是所有类的祖宗类,任意的一个类都直接或者间接的继承了Object类,都可以使用Object类中的方法Animal extends Object:直接继承Cat extends Animal:间接继承 能够重写Object类的toString方法altinsert,选择toString 能够重写Object类的equals方法…...

oracle 19c安装DBRU补丁时报错CheckSystemSpace的处理

oracle 19c的补丁目前已经发布到19.26版本了,数据库补丁安装也是数据库运维中的一个常见工作;近期在一个安装补丁的环境遇到了Prerequisite check "CheckSystemSpace" failed.错误,看起来是磁盘剩余空间不足的告警;按以…...

图像生成GAN和风格迁移

文章目录 摘要abstract1.生成对抗网络 GAN1.1 算法步骤 2.风格迁移2.1 损失函数2.2 论文阅读2.2.1 简介2.2.2 方法2.2.3 实验2.2.4 结论 3.总结 摘要 本周学习了生成对抗网络(GAN)与风格迁移技术在图像生成中的应用。首先介绍了GAN模型中生成器与判别器…...

golangAPI调用deepseek

目录 1.deepseek官方API调用文档1.访问格式2.curl组装 2.go代码1. config 配置2.模型相关3.错误处理4.deepseekAPI接口实现5. 调用使用 3.响应实例 1.deepseek官方API调用文档 1.访问格式 现在我们来解析这个curl 2.curl组装 // 这是请求头要加的参数-H "Content-Type:…...

【第15章:量子深度学习与未来趋势—15.3 量子深度学习在图像处理、自然语言处理等领域的应用潜力分析】

一、开篇:为什么我们需要关注这场"量子+AI"的世纪联姻? 各位技术爱好者们,今天我们要聊的这个话题,可能是未来十年最值得押注的技术革命——量子深度学习。这不是简单的"1+1=2"的物理叠加,而是一场可能彻底改写AI发展轨迹的范式转移。 想象这样一个…...

JAVA安全—Shiro反序列化DNS利用链CC利用链AES动态调试

前言 讲了FastJson反序列化的原理和利用链,今天讲一下Shiro的反序列化利用,这个也是目前比较热门的。 原生态反序列化 我们先来复习一下原生态的反序列化,之前也是讲过的,打开我们写过的serialization_demo。代码也很简单&…...

LangChain大模型应用开发:提示词工程应用与实践

介绍 大家好,博主又来给大家分享知识了。今天给大家分享的内容是LangChain提示词工程应用与实践。 在如今火热的大语言模型应用领域里,LangChain可是一个相当强大且实用的工具。而其中的提示词(Prompt),更是我们与语言模型进行有效沟通的关…...

【数据结构入门 65 题】目录

目录 1 函数题2 编程题3 数据结构实现 1 函数题 6-1 单链表逆转 6-2~6-6 线性表基本操作 6-7 在一个数组中实现两个堆栈 6-8 求二叉树高度 6-9 二叉树的遍历 6-10 二分查找 6-11 先序输出叶结点 6-12 二叉搜索树的操作集 2 编程题 3 数据结构实现 栈和队列...

osgearth控件显示中文(八)

当前自己知道的方法大概有以下两种: (一)直接转成utf8 其实在前面的文章中已经有了。 osgEarth::Annotation::PlaceNode *pn = new osgEarth::Annotation::PlaceNode(GeoPoint(geoSRS, 110, 34), String2UTF8("中国"), style);std::wstring String2Wstring(con…...

2025 N1CTF crypto 复现

近一个月都没有学习了,一些比赛也没有打,很惭愧自己还是处在刚放假时的水平啊,马上开学了,抓紧做一些训练来康复。 CheckIn import os from Crypto.Util.number import * from secret import FLAGp, q getPrime(512), getPrime…...

Windows Defender Control--禁用Windows安全中心

Windows Defender Control--禁用Windows安全中心 链接:https://pan.xunlei.com/s/VOJDuy2ZEqswU4sEgf12JthZA1?pwdtre6#...

mount 出现 2038 问题

在 linux 上挂载 ext4 文件系统时出现了 2038 年问题,如下: [ 236.388500] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) [ 236.388560] ext4 filesystem being mounted at /root/tmp supports timestamps until 2…...

langchain+不同模型api使用教程

目录 一、Langchainopenai1. gpt-4o2. o13. o3-mini 二、Anthropic1.claude-3-5-sonnet-latest 三、四、 一、Langchainopenai langchain_community 可能是一个较旧的库,或者它的版本与 OpenAI 的最新 API 不兼容。OpenAI 的 API 可能会更新,而 langcha…...

【第12章:深度学习与伦理、隐私—12.4 深度学习与伦理、隐私领域的未来挑战与应对策略】

凌晨三点的自动驾驶测试场,AI系统突然在暴雨中做出惊人决策——它选择撞向隔离带而不是紧急变道,因为算法推演发现隔离带后的应急车道站着五个工程师。这个惊悚的伦理困境,揭开了深度学习伦理危机最尖锐的冰山一角。 一、潘多拉魔盒已开:深度学习伦理的四大原罪 1.1 数据原…...

2. 图片性能优化

图片性能优化 图片懒加载 如何判断图片出现在了当前视口 &#xff08;即如何判断我们能够看到图片&#xff09;如何控制图片的加载 原生实现 <img src"shanyue.jpg" loading"lazy" />loading"lazy" 延迟加载图像&#xff0c;直到它和视…...

Java与DeepSeek的完美结合:开启高效智能编程新时代 [特殊字符]

一、DeepSeek&#xff1a;Java开发者的智能编程伙伴 &#x1f916; 1.1 DeepSeek是什么&#xff1f; DeepSeek是一款AI驱动的智能编程工具&#xff0c;通过深度学习和自然语言处理技术&#xff0c;为Java开发者提供&#xff1a; 智能代码补全&#xff1a;根据上下文预测代码 …...

RL--2

强化学习当中最难的两个点是&#xff1a; 1.reward delay&#xff1b; 2.agent的行为会影响到之后看到的东西&#xff0c;所以agent要学会探索世界&#xff1b; 关于强化学习的不同类型&#xff0c;可以分为以下三种&#xff1a; 一种是policy based&#xff1a;可以理解为它是…...

SpringMVC新版本踩坑[已解决]

问题&#xff1a; 在使用最新版本springMVC做项目部署时&#xff0c;浏览器反复500&#xff0c;如下图&#xff1a; 异常描述&#xff1a; 类型异常报告 消息Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [int] not specifie…...

2025 pwn_A_childs_dream

文章目录 fc/sfc mesen下载和使用推荐 fc/sfc https://www.mesen.ca/docs/ mesen2安装&#xff0c;vscode安装zg 任天堂yyds w d 左右移动 u结束游戏 i崩溃或者卡死了 L暂停 D658地方有个flag 发现DEEE会使用他。且只有这个地方&#xff0c;maybe会输出flag&#xff0c;应…...

pandas(11 分类数据和数据可视化)

前面内容&#xff1a;pandas(10 日期和Timedelta) 目录 一、Python Pandas 分类数据 1.1 pd.Categorical() 1.2 describe() 1.3 获取类别的属性 1.4 分类操作 1.5 分类数据的比较 二、Python Pandas 数据可视化 2.1 基础绘图&#xff1a;plot 2.2 条形图 2.3 直方…...

Redis 03章——10大数据类型概述

一、which10 &#xff08;1&#xff09;一图 &#xff08;2&#xff09;提前声明 这里说的数据类型是value的数据类型&#xff0c;key的类型都是字符串 官网&#xff1a;Understand Redis data types | Docs &#xff08;3&#xff09;分别是 1.3.1redis字符串&#xff0…...

bps是什么意思

本文来自DeepSeek "bps" 是 "bits per second" 的缩写&#xff0c;表示每秒传输的比特数&#xff0c;用于衡量数据传输速率。1 bps 即每秒传输 1 比特。 常见单位 bps&#xff1a;比特每秒 Kbps&#xff1a;千比特每秒&#xff08;1 Kbps 1,000 bps&am…...

撕碎QT面具(1):Tab Widget转到某个Tab页

笔者未系统学过C语法&#xff0c;仅有Java基础&#xff0c;具体写法仿照于大模型以及其它博客。自我感觉&#xff0c;如果会一门对象语言&#xff0c;没必要先刻意学C&#xff0c;因为自己具有对象语言的基础&#xff0c;等需要用什么再学也不迟。毕竟不是专门学C去搞算法。 1…...

PCL源码分析:点云数学形态学操作

文章目录 一、简介二、源码分析三、实现效果参考资料一、简介 基本原理:使用结构元素(通常为滤波的窗口)的窗口模板作为处理单元,利用形态学中的膨胀与腐蚀相组合即可达到滤波的效果。 点云数据中的数学形态学运算其实和二维图像上的运算非常相似,图像上像素有x,y和亮度值…...

项目版本号生成

需求 项目想要生成一个更新版本号&#xff0c;格式为v2.0.20250101。 其中v2.0为版本号&#xff0c;更新时进行配置&#xff1b;20250101为更新日期&#xff0c;版本更新时自动生成。 实现思路 创建一个配置文件version.properties&#xff0c;在其中配置版本号&#xff1b…...

rtsp rtmp 跟 http 区别

一 会话管理 与SDP 1. RTSP&#xff08;Real Time Streaming Protocol&#xff09; (1) 是否需要建立会话&#xff1f; 需要显式会话。 RTSP 是基于会话的协议&#xff0c;客户端与服务端通过 SETUP、PLAY、TEARDOWN 等命令明确控制会话生命周期。 会话标识&#xff1a;通过…...