Electron菜单的创建和使用
简介一个桌面应用肯定缺少不了菜单,那么本文主要介绍下如何在Electron中创建和使用菜单。
一、菜单创建和使用
Electron创建菜单需要创建一个菜单模板,那么下面先在根目录下创建一个新文件menu.js,内容如下
const { Menu } = require('electron')
var template = [
{
label: '菜单1',
submenu: [
{ label: '菜单1-1' },
{ label: '菜单1-2' }
]
},
{
label: '菜单2',
submenu: [
{ label: '菜单2-1' },
{ label: '菜单2-2' }
]
}
]
var m = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(m)
注意:很多人都常常将label写成了lable,然后出错,找了很长时间,结果是单词写错了。
菜单属于主线程,所以需要在主线程main.js的read的生命周期中加入如下代码:
require('./menu.js')
注意:这里一定要用./menu.js,而不能简写成menu.js
运行结果:
二、菜单中打开新窗口
修改menu.js,新增“打开新窗口”的菜单,定义点击事件,代码如下
const { Menu, BrowserWindow } = require('electron')
var template = [
{
label: '菜单1',
submenu: [
{ label: '菜单1-1' },
{ label: '菜单1-2' },
{
label:'打开新窗口',
click:()=>{
win = new BrowserWindow({
width:500,
height:500,
webPreferences:{ nodeIntegration:true}
})
win.loadFile('index.html')
win.on('closed',()=>{
win = null
})
}
}
]
},
{
label: '菜单2',
submenu: [
{ label: '菜单2-1' },
{ label: '菜单2-2' }
]
}
]
var m = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(m)
三、菜单绑定快捷键
绑定快捷键的属性是accelerator属性,比如我们新打开一个窗口,我们就的代码可以写成这样。
const { Menu, BrowserWindow } = require('electron')
var template = [
{
label: '菜单1',
submenu: [
{ label: '菜单1-1' },
{ label: '菜单1-2' },
{
label:'打开新窗口',
accelerator:`ctrl+b`,
click:()=>{
win = new BrowserWindow({
width:500,
height:500,
webPreferences:{ nodeIntegration:true}
})
win.loadFile('index.html')
win.on('closed',()=>{
win = null
})
}
}
]
},
{
label: '菜单2',
submenu: [
{ label: '菜单2-1' },
{ label: '菜单2-2' }
]
}
]
var m = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(m)
四、右键菜单
const { remote } = require('electron')
var rigthTemplate = [
{
label: '文件', click: function () {
console.log('点击事件');
}
},
{
label: '编辑', submenu: [
{ label: '保存' },
{ label: '另存' }
]
},
{ label: '帮助' }
]
window.onload = function () {
var m = remote.Menu.buildFromTemplate(rigthTemplate)
window.addEventListener('contextmenu', function (e) {
//阻止当前窗口默认事件
e.preventDefault();
//把菜单模板添加到右键菜单
m.popup({ window: remote.getCurrentWindow() })
})
}
注意:这里使用直接使用remote会报错,高版本的Electron是不能直接调用remote的。所以需要在主进程中设置:
enableRemoteModule: true
当我们完成一个Golang项目后,我们希望能编译成不同系统上的可执行文件。所以本文主要记录如何编译成Windows和Linux上的可执行文件。
在Golang编程中,经常会用到MongoDB数据库进行查询,但是当日期是一个字符串的时候,如何根据日期进行分组查询呢?本文将记录如何分组查询统计。
wget命令用于从网络上下载某些资源,该命令对于能够连接到互联网的Linux系统的作用非常大,可以直接从网络上下载自己所需要的文件。
draw.io 是一个强大简洁的在线的绘图网站,支持流程图,UML图,架构图,原型图等图标。支持Github,Google Drive, One drive等网盘同步,并且永久免费。如果觉得使用Web版不方便,draw.io 也提供了多平台的离线桌面版可供下载。
在使用Python进行开发时,pip作为Python的包管理工具,是我们安装和管理Python库的重要工具。然而,有时候由于操作失误或其他原因,我们可能会不小心卸载了pip。这时,如何手动重新安装pip就显得尤为重要。本文将介绍两种手动安装pip的方法,帮助你快速恢复pip功能。
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题