Electron – 菜单

545次阅读  |  发布于4年以前

本文翻译转载自www.tutorialspoint.com

桌面应用程序有两种类型的菜单——应用程序菜单(在顶部栏上)和上下文菜单(右键单击菜单)。我们将在这一章学习如何创建这两个。

我们将使用两个模块——菜单和菜单项模块。注意,菜单和菜单项模块仅在主进程中可用。要在呈现程序过程中使用这些模块,您需要远程模块。我们将在创建上下文菜单时遇到这个问题。

现在,让我们为主要进程创建一个新的main.js文件

const {app, BrowserWindow, Menu, MenuItem} =require('electron')
const url = require('url')
const path = require('path')

let win

function createWindow() {
 win = newBrowserWindow({width: 800, height: 600})
 win.loadURL(url.format ({
 pathname:path.join(\_\_dirname, 'index.html'),
 protocol:'file:',
 slashes: true
 }))

}

const template = \[
 {
 label:'Edit',
 submenu: \[
 {
 role:'undo'
 },
 {
 role:'redo'
 },
 {
 type: 'separator'
 },
 {
 role:'cut'
 },
 {
 role:'copy'
 },
 {
 role:'paste'
 }
 \]
 },
 {
 label:'View',
 submenu: \[
 {
 role:'reload'
 },
 {
 role:'toggledevtools'
 },
 {
 type:'separator'
 },
 {
 role:'resetzoom'
 },
 {
 role:'zoomin'
 },
 {
 role:'zoomout'
 },
 {
 type:'separator'
 },
 {
 role:'togglefullscreen'
 }
 \]
 },
 {
 role:'window',
 submenu: \[
 {
 role:'minimize'
 },
 {
 role:'close'
 }
 \]
 },
 {
 role: 'help',
 submenu: \[
 {
 label:'Learn More'
 }
 \]
 }
\]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
app.on('ready', createWindow)

我们正在从这里的模板构建一个菜单。这意味着我们将菜单作为JSON提供给函数,其余的就由它来处理了。现在我们必须将此菜单设置为应用程序菜单。

现在创建一个名为index的空HTML文件,并使用以下代码运行运行此应用程序

$ electron ./main.js

在应用程序菜单的正常位置,您将看到基于上述模板的菜单。

我们从主进程创建了这个菜单。现在让我们为我们的应用程序创建一个上下文菜单。我们将在HTML文件中这样做

<!DOCTYPE html>
<html>

 <head>

 <metacharset = "UTF-8">

 <title>Menus</title>

 </head>

 <body>

 <scripttype = "text/javascript">

 const{remote} = require('electron')

 const{Menu, MenuItem} = remote

 const menu = new Menu()

 // Buildmenu one item at a time, unlike

 menu.append(new MenuItem ({

 label:'MenuItem1',

 click(){

 console.log('item 1 clicked')

 }

 }))

 menu.append(new MenuItem({type: 'separator'}))

 menu.append(new MenuItem({label: 'MenuItem2', type: 'checkbox', checked:true}))

 menu.append(new MenuItem ({

 label:'MenuItem3',

 click(){

 console.log('item3 clicked')

 }

 }))

 // Preventdefault action of right click in chromium. Replace with our menu.

 window.addEventListener('contextmenu', (e) => {

 e.preventDefault()

 menu.popup(remote.getCurrentWindow())

 }, false)

 </script>

 </body>

</html>

使用远程模块导入菜单和菜单项模块;然后,我们创建了一个菜单,并将菜单项一个接一个地添加到其中。此外,我们阻止了在chromium中右键单击的默认操作,并将其替换为菜单。

Electron菜单的创建是一个非常简单的任务。现在您可以将事件处理程序附加到这些项上,并根据需要处理事件。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8