当前位置: 首页 > article >正文

Electron【详解】菜单 Menu

顶部菜单

因顶部菜单款式传统,且不同系统的配置不同,建议在页面中自行实现菜单,而不采用 Electron 自带的菜单方案。

主进程中

import { Menu } from 'electron'
const template = [{ role: 'appMenu' }]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)

在 template 中添加菜单配置项即可。

  • role 为系统内置的菜单,更多系统菜单如:
{ role: 'undo' },
{ role: 'redo' },
{ type: 'separator' }, // 我是分割线,不是菜单
{ role: 'cut' },
{ role: 'copy' },
{ role: 'paste' },

在这里插入图片描述

自定义菜单

自定义菜单名称 label

  {
    label: '自定义菜单',
    submenu: [{ role: 'minimize' }]
  }

在这里插入图片描述

自定义菜单方法 click 和 快捷键 accelerator

  {
    label: '自定义菜单',
    submenu: [
      {
        label: 'electron 官网',
        click: async () => {
          // 会用默认浏览器打开electron 官网
          await shell.openExternal('https://electronjs.org')
        },
        accelerator: 'CmdOrCtrl+1' // 快捷键
      }
    ]
  }

在这里插入图片描述

自定义菜单类型 type

分割线
{ type: 'separator' }

在这里插入图片描述

单选
  {
    label: '菜单位置',
    submenu: [
      {
        type: 'radio',
        label: '顶部',
        click: () => {
          // 省略了实现逻辑
        }
      },
      {
        type: 'radio',
        label: '底部',
        click: () => {
          // 省略了实现逻辑
        }
      }
    ]
  }

在这里插入图片描述

多选
  {
    label: '自定义菜单',
    submenu: [
      {
        type: 'checkbox',
        label: '显示工具栏',
        click: (e) => {
          // 省略了实现逻辑
          console.log(e.checked)
        }
      }
    ]
  }

在这里插入图片描述

专门针对 mac 系统配置菜单

const isMac = process.platform === 'darwin'
const template = [
  ...(isMac
    ? [
        {
          label: 'mac系统菜单',
          submenu: [{ role: 'quit' }]
        }
      ]
    : [
        {
          label: '其他系统菜单',
          submenu: [{ role: 'quit' }]
        }
      ])
]

动态改变菜单

import { Menu, MenuItem } from 'electron'

const template = [
  {
    id: 'customMenu',
    label: '自定义菜单',
    submenu: [
      {
        id: 'customMenu-oldWeb',
        label: 'electron 官网',
        click: async () => {
          // 隐藏原菜单项
          menu.getMenuItemById('customMenu-oldWeb')!.visible = false

          // 创建新菜单项
          const newMenuItem = new MenuItem({
            id: 'customMenu-newWeb',
            label: 'electron 官网(新)',
            click: async () => {
              await shell.openExternal('https://electronjs.org')
            },
            accelerator: 'CmdOrCtrl+2' // 快捷键
          })

          // 将新菜单项添加到原菜单项的子菜单中
          menu.getMenuItemById('customMenu')?.submenu?.append(newMenuItem)
          // 更新菜单
          Menu.setApplicationMenu(menu)
        },
        accelerator: 'CmdOrCtrl+1' // 快捷键
      }
    ]
  }
]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)

在这里插入图片描述

清空菜单

Menu.setApplicationMenu(null)

任务栏菜单

  • Mac 系统
  • Windows 系统

右键菜单

见 https://blog.csdn.net/weixin_41192489/article/details/144611858


http://www.kler.cn/a/453133.html

相关文章:

  • tokenizer、tokenizer.encode、tokenizer.encode_plus比较
  • 打造两轮差速机器人fishbot:从零开始构建移动机器人
  • 前端开发 -- 自动回复机器人【附完整源码】
  • 如何检查交叉编译器gcc工具链里是否有某个库(以zlib库和libpng库为例)
  • 修炼之道 ---其四
  • 3.系统学习-熵与决策树
  • 福特汽车物流仓储系统WMS:开源了,可直接下载
  • CentOS下安装RabbitMQ
  • HNUST-数据分析技术课堂实验
  • 软件渗透测试如何做?渗透测试作用有哪些?
  • flask后端开发(4):模板访问对象属性和过滤器的使用
  • 短视频运营行业该如何选择服务器?
  • 使用FFmpeg进行拉流和推流操作
  • 运行Zr.Admin项目(后端)
  • 使用React Strict DOM改善React生态系统
  • 使用openvino加速部署paddleocr文本方向分类模型(C++版)
  • 质数分解,用sqrt缩小范围
  • Ps:在 Photoshop 中编辑视频
  • 微信小程序中遇到过的问题
  • 【Laravel】接口的访问频率限制器