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创建菜单相关推荐

  1. php创建菜单_php实现微信公众号创建自定义菜单功能的实例代码

    目的 创建自定义菜单,实现菜单事件. 首先获取Access_Token 接口: 我用的是测试号,修改APPID和APPSECRET,然后浏览器访问上面这个Url即可生成Access_Token 然后配 ...

  2. anaconda创建菜单失败

    20210508 六 版本安装Anaconda3-2019.07-Windows-x86_64.exe报错 anaconda创建菜单失败 到官网下载最新版本问题解决Anaconda3-2020.11- ...

  3. 如何使用Extentions创建菜单

    Eclipse版本:3.4 Eclipse可以在plugin.xml中创建菜单,可是网上资料不多,经过一番艰苦研究,终于发现了使用Extentions创建菜单的方法,步骤如下: 1. 创建菜单Exte ...

  4. python界面设置-PYTHON图形化操作界面的编程七__创建菜单

    PYTHON图形化操作界面的编程七__创建菜单 十八.创建菜单 1.水平菜单的创建 创建菜单需要多条语句,所以这里通过实例来说明水平菜单的创建方法: 下面的语句可以在窗口中添加水平菜单,其中前四行语句 ...

  5. python函数做菜单_PYTHON图形化操作界面的编程七__创建菜单

    PYTHON图形化操作界面的编程七__创建菜单 十八.创建菜单 1.水平菜单的创建 创建菜单需要多条语句,所以这里通过实例来说明水平菜单的创建方法: 下面的语句可以在窗口中添加水平菜单,其中前四行语句 ...

  6. Linuxshell之高级Shell脚本编程-创建菜单

    写在前面:案例.常用.归类.解释说明.(By Jim) 创建菜单 #!/bin/bash # testing the script clear echo echo -e "\t\t\tSys ...

  7. 2.odoo13之跟着官网做项目/实例(创建菜单,创建action,创建视图、搜索过滤器,分组)

    目录 1.创建菜单 2.创建动作,action 3.运行程序,创建数据 4.添加自定义列表视图(树视图) 5.添加表单视图 6.添加搜索视图 7.搜索视图的过滤器,以及搜索分组 1.创建菜单 在vie ...

  8. Electron - 创建跨平台的桌面客户的应用程序

    Electron 框架的前身是 Atom Shell,可以让你写使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序.它是基于io.js 和 Chromium 开源项目,并用于在 ...

  9. vue 递归创建菜单_如何在Vue中创建类似中等的突出显示菜单

    vue 递归创建菜单 by Taha Shashtari 由Taha Shashtari 如何在Vue中创建类似中等的突出显示菜单 (How to Create a Medium-Like Highl ...

最新文章

  1. RHEL5.5学习--安装vmtools
  2. android 九宫格绘制,Android draw9patch.bat 九宫格绘制工具使用
  3. JSP中文乱码问题解决
  4. 核试验计算机模拟,随着信息技术的发展,包括核试验在内的许多科学研究都可以用计算机模拟...
  5. python book.save_2.3.1. 将二进制数据存为文件:saveBinDataToFile
  6. RedHat 7配置FTP服务
  7. 【视频课】一课彻底掌握深度学习图像分类各种问题,学习CV你值得拥有
  8. java聊天室程序_Java简易聊天室程序socket
  9. ES5程序设计转ES6 笔记
  10. Unity性能优化的N种武器
  11. ashx连接mysql_对C#中的web访问mysql数据库的一些知识点进行了整理归纳总结
  12. 一个springboot能支持多少并发_跑滴滴一个月能挣多少?-好不好
  13. chisel(安装)
  14. Java 对文件的操作
  15. Spring框架整合多数据源 Mysql+oracle
  16. Aspose-words结合Freemarker实现word邮件合并功能,批量处理word模板文件
  17. Linux查看分析任务计划命令,详述Linux计划任务的 at和crontab的命令 以及如何查看crontab日志...
  18. yeoman、bower、grunt 开发收集
  19. jquery-pager的使用
  20. mysql 正则表达式 regExp

热门文章

  1. windows server 2003上安装mysql的问题
  2. Linux系统下MBR分区表的备份与恢复
  3. U盘制做DOS启动盘
  4. 关于一些运算((与运算)、|(或运算)、^(异或运算)........)的本质理解【转】...
  5. js 闭包的用法详解
  6. bzoj2806: [Ctsc2012]Cheat
  7. 【android】TabLayout文字闪烁问题
  8. [王晓刚]深度学习在图像识别中的研究进展与展望(转发)
  9. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解
  10. 用C#获取硬盘序列号,CPU序列号,网卡MAC地址