第七节 Electron顶部菜单及右键菜单

【Electron Playground 系列】菜单篇 作者:梁棒棒 1.简介 菜单主要分为应用程序菜单、上下文菜单,在tray和dock中也有用到菜单,本节主要介绍前两种。文档地址 1.1 应用程序菜单 mac和windows都在左上角,但是一个在屏幕左上角一个在应用程序视图左上角。 mac是这样的: windows长这样: 如果windows下没有显示菜单,在当前窗口按alt键即会出现。 1.2 上下文菜单 即右键菜单。 2. 创建菜单 2.1 创建应用程序菜单 接下来我们创建应用程序菜单。如下步骤: 引入Menu类 定义一个菜单模板 调用Me. 阅读详情

系列文章目录


第一节 electron 介绍

第二节 创建electron项目并启动

第三节 Electron运行流程 、 主进程渲染进程并使用nodejs

第四节 Electron 调用H5事件结合node模块fs 实现文件拖拽读取

第五节 Electron 模块介绍 remote模块详细介绍

第六节 Electron安全策略

目录

前言

今天说说顶部菜单和右键菜单,顶部菜单electron默认就有不过是英文的。右键可没有需要自己搞。我们看下默认的顶部菜单(如下图1),修改后效果如图2。

实现方法

这节我们用到了Menu模块。它可以用来创建原生菜单,可用作应用菜单和 context 菜单。这个模块是主进程的一个模块,并且可以通过 remote 模块给渲染进程调用。

一、环境及页面搭建

环境搭建见第二节

页面:在根目录下新建ipcMain文件夹新建menu.js文件

二、顶部菜单

1、在menu.js引入Menu模块

const { Menu } = require("electron");

2、定义菜单 在这块可以丰富你的菜单比如快捷键 点击事件等。

&nbs

Electron 之自定义顶部菜单 阅读详情

相关推荐

Electron 之右键菜单-remote模块实现

Electron 之右键菜单-remote模块实现

www_58soho的博客 778

Electron 自定义菜单与手动添加菜单

label: '文件' ,label: '打开' ,label: '编辑' ,label: '撤销' ,label: '重做' ,label: '剪切' ,label: '复制' ,label: '粘贴' ,label: '全选' ,label: '查看' ,label: '重载' ,// 重载之后, 刷新并关闭所有的次要窗体 if(focusedWindow.id == = 1) {label: '切换全屏' ,label: '切换开发者工具' ,

lovoo的博客 2877

Electron自定义顶部菜单

自定义顶部菜单 main.js const { app, BrowserWindow} = require('electron') // 热加载 const reloader = require('electron-reloader') reloader(module) // 监听初始化完成的生命周期 app.on('ready', () => { const mainWindow = new BrowserWindow({ width: 700, he

YANGGEOL 2939

electron在BrowserWindow中禁止右键菜单

最近使用 electron + vite + solid.js 做一个网络流量实时监控的小工具,其中需要禁止用户在获取 BrowserWindow 焦点后弹出默认右键菜单。

天问博客-专注于大前端技术 1579

Electron开发笔记----前端小白开发桌面应用之路(三)顶部菜单和右键菜单的创建

顶部菜单的编辑 桌面应用的菜单是我们很常用的一个功能,大到各种应用,小到一个小小的记事本,都有自己的菜单,那么接下来就看看如何实现一个菜单 传入模板生成菜单 Electron提供了一个模块Menu来实现菜单功能,我们直接通过一个demo来演示 首先创建如图的目录 这里menu文件夹下的menu.js是用来写菜单的信息,包括菜单的内容,以及菜单的点击事件触发的回调,这里实际上是在主进程中调用的,但是为了可以区分功能和复用,我写在menu.js中,并在主进程中require它 主进程index.js con

zem 1215

如何用electron高度自定义制一个系统菜单栏?

背景 最近在做一个实时聊天的PC客户端,遇到这样一个任务,在客户端接收到其他用户消息的时候要闪烁系统托盘图标,并且在鼠标滑到系统托盘的时候显示未读消息的菜单栏(对,就是类似QQ的消息提示,例如下图);这里补充一下,我们是选用electron作为我们的开发框架,对于我们来说,electron可以使用前端语言(HTML+CSS+JS),并且可以跨平台的框架,就是我们的最佳选择。 解题思路 1、正常人的思路,都是先看看electron有没有集成好的api, 我也不例外,所以找了一圈,找到了一个系统托盘Tray模

RJ0024的博客 1276

Electron使用指南——17定制菜单

本节为大家介绍如何为我们的应用定制一个菜单,让它看起来更像一个原生的桌面端APP。

关注我!带你一路 "狂飙" 到底! 608

Electron:菜单

所设置的菜单对象的label属性,表示是显示的文本,可以通过设置click属性,给对应的菜单添加点击事件。如果使用这样的方法子Electron应用内创建右键菜单,这些菜单只能显示在窗口页面内部,不能悬浮在窗口之上,那么就会导致右键显示的菜单,可能只显示一部分,出现滚动条。这样当我们在页面上点击鼠标右键的时候,就会触发window上的oncontextmenu事件,同时获取到鼠标的位置,然后在该位置上显示对应的菜单。我们在创建窗口的时候,设置frame为false,就是隐藏默认的标题栏和菜单。

读心悦 3437

第五讲使用Electron创建原生应用菜单和上下文菜单

第五讲使用Electron创建原生应用菜单和上下文菜单整体介绍Menu模块的构成静态方法实例方法实例事件MenuItem介绍click函数role参数type参数lable参数sublabel参数tooltipacceleratoriconenabledacceleratorWorksWhenHiddenvisibleBooleancheckedBooleanregisterAcceleratorsharingItemsubmenuidbeforeafterbeforeGroupContainingafte

星火燎猿 1231

使用 Electron 创建自定义菜单

Electron 是一个流行的桌面应用程序开发框架,它基于 Chromium 和 Node.js,允许开发人员使用 Web 技术构建跨平台的桌面应用程序。在 Electron 应用程序中,我们可以使用自定义菜单来提供应用程序的功能和导航选项。通过自定义菜单,您可以为您的Electron 应用程序提供更多的交互和功能选项,为用户提供更好的体验。上面的代码创建了一个 Electron 应用程序窗口,并定义了一个包含文件、编辑和帮助菜单的菜单模板。您可以根据自己的需求修改菜单模板,并在菜单项的。

XwyMysql的博客 544

隐藏 Electron 窗口的菜单栏

在某些情况下,你可能希望隐藏 Electron 窗口的菜单栏,以便创建更简洁的用户界面。本文将介绍如何通过代码实现隐藏 Electron 窗口的菜单栏。以上代码将在创建 Electron 窗口时隐藏菜单栏,并在窗口关闭时重新显示菜单栏和 Dock 图标。希望这篇文章能帮助你隐藏 Electron 窗口的菜单栏。如果你有任何问题,请随时提问。首先,你需要在 Electron 应用程序的主进程中进行以下操作。请注意,这些代码应该在主进程中执行,而不是在渲染进程中执行。

XwyMysql的博客 1906

Electron中的自定义菜单栏

请注意,在macOS上,Electron应用程序的菜单栏通常位于操作系统的菜单栏上方,并且默认情况下,macOS会自动为Electron应用程序生成一个菜单栏,其中包含了一些默认的菜单项。首先,我们需要在Electron应用程序的主进程中创建一个菜单栏。在上述代码中,我们创建了一个简单的菜单栏,包含了“文件”、“编辑”和“帮助”三个主菜单项。例如,“文件”菜单项有“打开”、“保存”和“退出”三个子菜单项。通过自定义菜单栏,开发者可以为应用程序添加各种功能和操作,提高用户体验和应用程序的易用性。

XwyMysql的博客 1274

Electron 菜单与快捷键

Electron 是一个强大的桌面应用程序开发框架,它基于 Web 技术栈,可以使用 HTML、CSS 和 JavaScript 构建跨平台的桌面应用程序。在 Electron 中,我们可以创建自定义菜单和快捷键,以便用户可以方便地与应用程序进行交互。当用户按下该组合键时,相应的回调函数将被触发,您可以在其中执行所需的操作。您可以根据自己的应用程序需求,创建更复杂和功能丰富的菜单和快捷键。在示例中,我们定义了一些常见的菜单项,如打开、保存、剪切、复制和粘贴,以及退出应用程序的选项。在上述示例中,我们使用。

AxCybersecurity的博客 387

Electron如何自定义菜单栏并隐藏调试

Electron如何自定义菜单栏 Electron如果不自定义菜单栏的话,可以弹出代码调试,一般electron发布上线后需要对菜单栏进行隐藏。 实现效果如下: 实现方法: 1.引用Menu const {app, BrowserWindow,Menu} = require('electron') 2.创建Menu实例 var menu ...

kerryqpw的博客 4973

05.electron-(自定义菜单)

自定义菜单 在主进程中定义自定义菜单 ipcMain/menu.js const { Menu } = require("electron"); //https://www.electronjs.org/docs/api/menu-item var menuTemplate = [ { label:"文件", // 二级菜单 submenu:[ { label:"新建",

做技术,坚持才是最重要的,一时的热情只是暂时的进步 1053

从牛顿冷却定律到热传导方程:一维热传导方程的物理直觉与数学推导

本文从牛顿冷却定律出发,结合傅里叶热传导定律和能量守恒原理,系统推导了一维热传导方程的数学形式。通过微元分析和物理直觉,揭示了温度随时间变化与空间二阶导数之间的关系,并阐释了热扩散率α的物理意义。文章还探讨了方程的边界条件、数值解法及其在材料科学和工程中的应用,为理解热量传递提供了清晰的物理图像和数学框架。

palm99的专栏 837

无线图像传输新突破:深度JSCC算法在低带宽环境下的性能实测

本文深入探讨了基于深度学习的信源信道联合编码(JSCC)算法在低带宽无线图像传输中的突破性表现。通过实测数据对比,深度JSCC在低信噪比环境下展现出卓越的鲁棒性,有效对抗传统方案的“悬崖效应”,实现图像质量的平滑下降,为远程医疗、工业巡检等严苛场景提供了新的解决方案。

weixin_29090089的博客 505

FANUC机器人电弧跟踪功能深度解析:从电流采样原理到ROBOGUIDE仿真避坑指南

本文深度解析FANUC机器人电弧跟踪技术,从电流采样原理到ROBOGUIDE仿真避坑指南,详细介绍了电流波形分析、实时补偿机制及现场调试技巧。针对工业焊接中的常见问题,提供从底层原理到高阶应用的解决方案,帮助工程师优化自动化焊接质量。

weixin_31785177的博客 551

网工、运维利器:MobaXterm,一款全能的远程工具

你好,这里是网络技术联盟站,我是瑞哥。是一款由Mobatek开发的多功能远程计算机管理工具,集成了多种网络协议和工具,专为网络工程师和系统管理员设计。它提供了丰富的远程连接功能,包括SSH、RDP、VNC、X11转发等,支持文件传输和多标签界面,内置了文本编辑器和多种网络工具,是一款全能的远程管理软件。MobaXterm的开发起始于2008年,最初只是一个简单的X服务器,但随着用户需求的不断增加和软件的逐步完善,MobaXterm逐渐发展成了一款功能全面、界面友好的远程管理工具。

网络技术联盟站 5229

2023华为od机试【最小循环子数组】C++

2023华为od机试【最小循环子数组】C++ 给定一个由若干整数组成的数组nums,请检查数组是否是由某个子数组重复循环拼接而成,请输出这个最小的子数组。

MISAYAONE的博客 2185

光伏硅片瑕疵检测边缘计算方案:Java+YOLOv11n+GraalVM Native Image+树莓派5部署,工业级高可靠落地

本文提出了一种基于边缘计算的光伏硅片瑕疵检测方案,针对传统人工检测和云端AI方案的不足,采用Java+YOLOv11n+树莓派5的技术路线,实现了低延迟、高可靠的工业级检测。方案核心特点包括: 分层解耦的边缘架构,将感知、推理全链路下沉到树莓派5,端到端延迟<100ms; 创新性技术选型组合:Java 17+ONNX Runtime+GraalVM Native Image,内存占用<200MB; 安防级可靠性设计,支持断网缓存、看门狗守护、异常自动恢复等工业场景需求; 完全基于开源技术栈,硬件

2601_94871597的博客 474

风险登记册vs问题日志:项目经理必须掌握的区别与应用

在项目管理的世界里,风险登记册和问题日志就像是项目经理的两个得力助手。我们的目的就是要搞清楚这两个助手各自的特点、区别以及如何在项目中好好使用它们。范围涵盖了项目从启动到结束的整个过程,无论是小项目还是大项目,都能从对这两个工具的正确使用中受益。我们先会用有趣的故事引出风险登记册和问题日志的概念,然后像给小学生讲故事一样解释它们是什么。接着分析它们之间的关系和区别,再用代码示例模拟它们在项目中的应用,之后介绍实际的应用场景、推荐相关工具和资源,探讨未来的发展趋势和挑战。

项目管理的博客 875

模型泛化能力提升:领域自适应与迁移学习

模型泛化能力提升:领域自适应与迁移学习​ ,人工智能,计算机视觉,大模型,AI,在机器学习和深度学习的应用中,模型的泛化能力是一个关键问题。泛化能力指的是模型在新的、未见过的数据上表现良好的能力。然而,实际情况中,训练数据和测试数据往往来自不同的领域,存在分布差异,这会导致模型的泛化能力下降。领域自适应与迁移学习正是为了解决这一问题而发展起来的重要技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 第六节 Electron安全策略
下一篇: electron 应用程序updater实现热更新
hongc93
博客等级 码龄16年 288粉丝 141原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

hongc93

感谢鼓励 继续航行

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

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

打赏作者

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

抵扣说明:

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

余额充值