electron创建菜单
2019独角兽企业重金招聘Python工程师标准>>>
在桌面应用开发通常有二种菜单,一种是位于顶部的菜单栏和上下文菜单(通过右击呼出菜单)。现在我们学习这二种菜单的使用。
在electron提供了二个模块,分别为Menu和MenuItem.我们需要注意的是这二个模块仅能够在main线程中使用。在rendere线程中同样提供了另一套模块,一会在创建上下文菜单时会看到。
现在我们创建一个main.js文件,并且写入下面的代码。
const { Menu,BrowserWindow } = require('electron')
const electron = require('electron')
const app = electron.appconst template = [ //菜单的内容{label: 'Edit',submenu: [{role: 'undo'},{role: 'redo'},{type: 'separator'//创建一个分隔符},{role: 'cut'},{role: 'copy'},{role: 'paste'},{role: 'pasteandmatchstyle'},{role: 'delete'},{role: 'selectall'}]},{label: 'View',submenu: [{label: 'Reload',accelerator: 'CmdOrCtrl+R',click(item, focusedWindow) {if (focusedWindow) focusedWindow.reload()}},{label: 'Toggle Developer Tools',accelerator: process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I',click(item, focusedWindow) {if (focusedWindow) focusedWindow.webContents.toggleDevTools()}},{type: 'separator'},{role: 'resetzoom'},{role: 'zoomin'},{role: 'zoomout'},{type: 'separator'},{role: 'togglefullscreen'}]},{role: 'window',submenu: [{role: 'minimize'},{role: 'close'}]},{//添加一个菜单项的点击事件,浏览electron官网role: 'help',submenu: [{label: 'Learn More',click() { require('electron').shell.openExternal('http://electron.atom.io') }}]}
]if (process.platform === 'darwin') { //判断当前的系统是否为macconst name = app.getName()template.unshift({//添加首菜单项label: name,submenu: [{role: 'about'},{type: 'separator'},{role: 'services',submenu: []},{type: 'separator'},{role: 'hide'},{role: 'hideothers'},{role: 'unhide'},{type: 'separator'},{role: 'quit'}]})// Edit menu.template[1].submenu.push({type: 'separator'},{label: 'Speech',submenu: [{role: 'startspeaking'},{role: 'stopspeaking'}]})// Window menu.template[3].submenu = [{label: 'Close',accelerator: 'CmdOrCtrl+W',role: 'close'},{label: 'Minimize',accelerator: 'CmdOrCtrl+M',role: 'minimize'},{label: 'Zoom',role: 'zoom'},{type: 'separator'},{label: 'Bring All to Front',role: 'front'}]
}
let win
function createWindow() {win = new BrowserWindow({ width: 800, height: 600, })win.loadURL(`file://${__dirname}/index.html`)
// 窗口关闭时的事件win.on('closed', () => {win = null})
}
// 加载完成后事件
app.on('ready', () => {createWindow()const menu = Menu.buildFromTemplate(template)Menu.setApplicationMenu(menu)
})
我们通过Teample来构建一个菜单,template保存了菜单的信息,并且对mac系统进行特殊的处理。
现在我们创建一个index.html,并且创建一个上下文的菜单,MenuItem1点击输出信息,MenuItem2设置为可选按钮
<!-- index.html -->
<script>const {remote} = require('electron')const {Menu, MenuItem} = remoteconst menu = new Menu()menu.append(new MenuItem({label: 'MenuItem1', click() { console.log('item 1 clicked') }}))//点击MenuItem1,在console输出信息menu.append(new MenuItem({type: 'separator'}))menu.append(new MenuItem({label: 'MenuItem2', type: 'checkbox', checked: true}))//添加一个可选菜单window.addEventListener('contextmenu', (e) => { e.preventDefault()menu.popup(remote.getCurrentWindow())}, false)</script>
最终的效果,如下图所示
![输入图片说明](http://7xrkms.com1.z0.glb.clouddn.com/屏幕截图\ 2017-08-13 01.17.24.png "最终效果")
转载于:https://my.oschina.net/u/215677/blog/1507264
electron创建菜单相关推荐
- php创建菜单_php实现微信公众号创建自定义菜单功能的实例代码
目的 创建自定义菜单,实现菜单事件. 首先获取Access_Token 接口: 我用的是测试号,修改APPID和APPSECRET,然后浏览器访问上面这个Url即可生成Access_Token 然后配 ...
- anaconda创建菜单失败
20210508 六 版本安装Anaconda3-2019.07-Windows-x86_64.exe报错 anaconda创建菜单失败 到官网下载最新版本问题解决Anaconda3-2020.11- ...
- 如何使用Extentions创建菜单
Eclipse版本:3.4 Eclipse可以在plugin.xml中创建菜单,可是网上资料不多,经过一番艰苦研究,终于发现了使用Extentions创建菜单的方法,步骤如下: 1. 创建菜单Exte ...
- python界面设置-PYTHON图形化操作界面的编程七__创建菜单
PYTHON图形化操作界面的编程七__创建菜单 十八.创建菜单 1.水平菜单的创建 创建菜单需要多条语句,所以这里通过实例来说明水平菜单的创建方法: 下面的语句可以在窗口中添加水平菜单,其中前四行语句 ...
- python函数做菜单_PYTHON图形化操作界面的编程七__创建菜单
PYTHON图形化操作界面的编程七__创建菜单 十八.创建菜单 1.水平菜单的创建 创建菜单需要多条语句,所以这里通过实例来说明水平菜单的创建方法: 下面的语句可以在窗口中添加水平菜单,其中前四行语句 ...
- Linuxshell之高级Shell脚本编程-创建菜单
写在前面:案例.常用.归类.解释说明.(By Jim) 创建菜单 #!/bin/bash # testing the script clear echo echo -e "\t\t\tSys ...
- 2.odoo13之跟着官网做项目/实例(创建菜单,创建action,创建视图、搜索过滤器,分组)
目录 1.创建菜单 2.创建动作,action 3.运行程序,创建数据 4.添加自定义列表视图(树视图) 5.添加表单视图 6.添加搜索视图 7.搜索视图的过滤器,以及搜索分组 1.创建菜单 在vie ...
- Electron - 创建跨平台的桌面客户的应用程序
Electron 框架的前身是 Atom Shell,可以让你写使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序.它是基于io.js 和 Chromium 开源项目,并用于在 ...
- vue 递归创建菜单_如何在Vue中创建类似中等的突出显示菜单
vue 递归创建菜单 by Taha Shashtari 由Taha Shashtari 如何在Vue中创建类似中等的突出显示菜单 (How to Create a Medium-Like Highl ...
最新文章
- RHEL5.5学习--安装vmtools
- android 九宫格绘制,Android draw9patch.bat 九宫格绘制工具使用
- JSP中文乱码问题解决
- 核试验计算机模拟,随着信息技术的发展,包括核试验在内的许多科学研究都可以用计算机模拟...
- python book.save_2.3.1. 将二进制数据存为文件:saveBinDataToFile
- RedHat 7配置FTP服务
- 【视频课】一课彻底掌握深度学习图像分类各种问题,学习CV你值得拥有
- java聊天室程序_Java简易聊天室程序socket
- ES5程序设计转ES6 笔记
- Unity性能优化的N种武器
- ashx连接mysql_对C#中的web访问mysql数据库的一些知识点进行了整理归纳总结
- 一个springboot能支持多少并发_跑滴滴一个月能挣多少?-好不好
- chisel(安装)
- Java 对文件的操作
- Spring框架整合多数据源 Mysql+oracle
- Aspose-words结合Freemarker实现word邮件合并功能,批量处理word模板文件
- Linux查看分析任务计划命令,详述Linux计划任务的 at和crontab的命令 以及如何查看crontab日志...
- yeoman、bower、grunt 开发收集
- jquery-pager的使用
- mysql 正则表达式 regExp
热门文章
- windows server 2003上安装mysql的问题
- Linux系统下MBR分区表的备份与恢复
- U盘制做DOS启动盘
- 关于一些运算((与运算)、|(或运算)、^(异或运算)........)的本质理解【转】...
- js 闭包的用法详解
- bzoj2806: [Ctsc2012]Cheat
- 【android】TabLayout文字闪烁问题
- [王晓刚]深度学习在图像识别中的研究进展与展望(转发)
- DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址