Electron 原生 UI 元素集成实践

Electron原生UI元素集成实践:菜单、托盘图标和对话框的运用

  • 创建主菜单
  • 添加系统托盘图标
  • 使用对话框
  • 使用系统通知
  • 实现上下文菜单(右键菜单)
  • 结语

在 Electron 中,我们不仅可以利用 HTML5 和 JavaScript 构建应用程序的核心界面,还可以充分利用其丰富的原生 UI 元素,如菜单、托盘图标和对话框等,以提供更贴近操作系统的用户体验。

下面我们将深入探讨如何在 Electron 应用中集成并使用这些原生UI元素。

创建主菜单

Electron 允许开发者自定义应用程序的主菜单,包括文件、编辑、视图等常见菜单项以及自定义快捷键。

以下是如何创建一个基本菜单的示例:

const { app, Menu } = require('electron')
const template = [{label: '文件',submenu: [{ role: 'quit' } // 使用预设角色实现退出应用功能]},{label: '帮助',submenu: [{label: '关于',click() {console.log('显示关于对话框');// 在这里调用关于对话框的逻辑}}]}
]if (process.platform === 'darwin') {// macOS平台下添加额外菜单项template.unshift({label: app.getName(),submenu: [{ role: 'about' }, // 显示关于对话框{ type: 'separator' },{ role: 'services', submenu: [] },{ type: 'separator' },{ role: 'hide' }, // 隐藏窗口{ role: 'hideothers' }, // 隐藏其他应用窗口{ role: 'unhide' },{ type: 'separator' },{ role: 'quit' }]})
}const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu) // 设置为应用程序的主菜单

添加系统托盘图标

通过 Electron Tray 模块,我们可以将应用程序最小化到系统托盘,方便用户快速访问。

以下是如何创建并配置托盘图标及右键菜单:

const { Tray, nativeImage } = require('electron')let trayIconPath = path.join(__dirname, 'icon.png')
let tray = new Tray(nativeImage.createFromPath(trayIconPath))// 创建托盘右键菜单
const contextMenu = Menu.buildFromTemplate([{ label: '显示/隐藏主窗口', click: () => toggleMainWindow() },{ type: 'separator' },{ label: '退出', role: 'quit' }
])tray.setToolTip('我的Electron应用') // 设置工具提示
tray.setContextMenu(contextMenu) // 设置右键菜单function toggleMainWindow() {if (mainWindow.isVisible()) {mainWindow.hide()} else {mainWindow.show()}
}

使用对话框

Electron 提供了多种内置对话框,如消息对话框、警告对话框、确认对话框和输入对话框等。

下面是一个使用 dialog 模块展示信息对话框的例子:

const { dialog } = require('electron')// 显示信息对话框
dialog.showMessageBoxSync(mainWindow, {title: '重要通知',message: '这是一条重要的应用消息',detail: '更多详细信息...',buttons: ['确定'] // 自定义按钮文本
})

通过以上代码示例,我们可以直观地看到如何在 Electron 应用中整合原生 UI 元素,使应用与操作系统风格保持一致,并增强用户体验。无论是定制化的菜单结构,还是便捷的托盘图标交互,抑或是关键环节的对话框提示,都体现了 Electron 框架在跨平台桌面应用开发中的强大灵活性与易用性。

当然,Electron 中还有更多原生 UI 元素可以集成到我们的应用程序中。接下来我们继续探索另外两个实用的组件:通知上下文菜单

使用系统通知

在 Electron 应用中,我们可以利用 Notification 模块向用户发送桌面通知,这对于提醒或更新信息等场景非常有用:

const { Notification } = require('electron')// 创建并显示一个系统通知
let notification = new Notification({title: '任务完成',body: '您的文件已成功上传',silent: true // 若需要静默通知,则设置为true
})notification.show()// 也可以监听通知的点击事件
notification.on('click', () => {console.log('用户点击了通知')// 在这里执行相应的操作
})

实现上下文菜单(右键菜单)

除了主菜单和托盘图标菜单外,Electron 还支持在网页内容区域自定义上下文菜单。

下面是如何在一个网页元素上添加自定义右键菜单:

const { remote } = require('electron')document.getElementById('myElement').addEventListener('contextmenu', (event) => {event.preventDefault(); // 阻止默认右键菜单出现const menu = new remote.Menu();menu.append(new remote.MenuItem({label: '复制',click: () => {console.log('复制操作');// 实现复制功能的逻辑}}));menu.append(new remote.MenuItem({type: 'separator'}));menu.append(new remote.MenuItem({label: '删除',click: () => {console.log('删除操作');// 实现删除功能的逻辑}}));menu.popup(remote.getCurrentWindow());
});

结语

通过上述实践,您应该已经对如何在 Electron 应用中整合原生 UI 元素有了全面的了解。无论是系统级的菜单、托盘图标、对话框,还是页面内的通知和上下文菜单,Electron 都为我们提供了丰富的 API 以构建出既符合平台规范又高度个性化的用户体验。熟练掌握这些原生 UI 元素的运用,将极大地提升您的 Electron 应用在界面交互与用户体验方面的品质。

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

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

相关文章

python 爬虫爬取地理空间高程图GDEMV2 30m 中国地形

一.配置Python 爬虫 环境 from selenium import webdriver import time # from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys # from selenium.webdriver.comm…

Linux命令总结

1.目录切换 #切换到该目录下 usr 目录 cd usr #切换到上一层目录 cd ../ cd .. #切换到系统根目录 cd / #切换到用户主目录 cd ~ #切换到上一个操作所在目录 cd -2.目录操作 #显示目录中的文件和子目录的列表 ls /usr #目录下的所有目录和文件的详细信息 ll /usr #创建新目录…

【鸿蒙系统】 ---OpenHarmony加快本地编译(二)

💌 所属专栏:【鸿蒙系统】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢…

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序设计参考…

sqlalchemy和moke生成实体类(一)

前言 如果通过java生成实体类,可以通过mybatis或者mybatis-plus的generator。 而sqlalchemy也可以生成实体类,通过sqlalcodegen或者flask-sqlalcodegen。 使用flask-sqlalcodegen生成实体类 建表 建立学生表,如下。 create table stude…

【Android】系统启动流程分析 —— init 进程启动过程

本文基于 Android 14.0.0_r2 的系统启动流程分析。 一、概述 init 进程属于一个守护进程,准确的说,它是 Linux 系统中用户控制的第一个进程,它的进程号为 1,它的生命周期贯穿整个 Linux 内核运行的始终。Android 中所有其它的进程…

Machine Learning - Logistic Regression

目录 一、Activation Function Why introduce activation functions? There are several commonly used activation functions: 二、Sigmoid: 三、Logistic Regression Model: 四、Implementation of logistic regression: 五、Decis…

unity 多屏幕操作

想了解基础操作请移步:(重点是大佬写的好,这里就不再赘述) Unity 基础 之 使用 Display 简单的实现 多屏幕显示的效果_unity display-CSDN博客 在panel上也可以通过获取 Canvas,来达到切换多屏幕的操作, …

Pear-rec:一键开启多功能捕捉分享,告别繁琐操作!

Pear-rec:一键捕捉每一刻,让每一次分享变得简单高效 - 精选真开源,释放新价值。 概览 Pear-rec是一款采用先进的Electron框架构建,并以ReactJS为前端技术基础的跨平台桌面应用,专注于提供全方位的屏幕捕捉与媒体处理功…

【C++】类与对象(下篇)

在本篇博客中,作者将会讲解类与对象的最后一篇。 一.再谈构造函数 在类与对象(上篇)中,我们讲到了构造函数,其实构造函数就是给每个成员变量进行赋值!!! 仅仅只是赋值而已&#xf…

阿里云2核4G服务器支持多少人在线?2C4G多少钱一年?

2核4G服务器支持多少人在线?阿里云服务器网账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量因素。 阿里云2核4G服务器多少钱一年?2核4…

地宫取宝dfs

分析: 矩阵里的每一个位置都有标记,要求的问题是:有几种方法能完成这个规定。 那么,我们只需要计算从开始(1,1)到最后(n,m)的深度优先搜索中,有几个是满足要求的即为正确答案。 有个要求是,如果一个格子中…

Docker-镜像仓库

Docker ⛅Docker-Registry🌠分类🌠镜像仓库工作机制🌠常用的镜像仓库🌠镜像仓库命令☃️docker login☃️docker pull☃️docker push☃️docker search☃️docker logout 🌠镜像命令[部分]☃️docker images☃️docke…

Git工具的详细使用

一、环境说明 [rootgit ~]# getenforce Disabled [rootgit ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (d…

网络安全实训Day9

写在前面 访问控制和防火墙桌面端安全检测与防御 网络安全实训-网络安全技术 网络安全概述 访问控制 定义:通过定义策略和规则来限制哪些流量能经过防火墙,哪些流量不能通过。本质是包过滤 可以匹配的元素 IP协议版本 源区域和目的区域 源IP地址和目…

【赠书活动】Python编程 从入门到实践 第3版(图灵出品)(文末送书-进行中)

编辑推荐 适读人群 :本书适合对Python感兴趣的所有读者阅读。 编程入门就选蟒蛇书! 【经典】Python入门经典,常居Amazon等编程类图书TOP榜 【畅销】热销全球,以12个语种发行,影响超过 250 万读者 【口碑】好评如潮…

2-dubbo源码 : 源码环境搭建

好的开始是成功的一半,阅读源码也是一样。 很多同学在下定决心阅读一个开源框架之后,就一头扎进去,迷失在代码“迷宫”中。此时,有同学意识到,需要一边 Debug 一边看;然后又有一批同学在搭建源码环境的时候…

学习C++是否有必要学习Boost库?

C作为一门强大且灵活的编程语言,在软件开发领域有着广泛的应用。而在C的学习过程中,Boost库是一个经常被提及的重要资源。那么,对于C的学习者而言,是否有必要投入精力去学习Boost库呢?本文将就此问题展开详尽讨论。 一…

数独游戏(c++题解)

题目描述 给出一个的表格,部分格子已经填好数。请填完所有空白格子,使得表格每一行、每一列、每个的九宫格,都恰好填满这9个数字。 输入格式 9行9列的方阵状态,0代表空格。 输出格式 输出完成后的方阵状态,每一个…

论文:Zero-Shot Entity Linking by Reading Entity Descriptions翻译笔记(阅读实体描述、实体链接)

文章目录 论文题目:通过阅读实体描述实现零样本实体链接摘要1 介绍2 零点实体链接2.1 审查: 实体链接2.2 任务定义2.3 与其他 EL 任务的关系 3 数据集构建4 实体链接模型4.1 生成候选4.2 候选排序 5 适应目标世界6 实验6.1 基线6.2 对未知实体和新世界6.…