從零開始學Electron筆記(二)


在之前的文章我們簡單介紹了一下Electron可以用WEB語言開發桌面級應用,接下來我們繼續說一下Electron的菜單創建和事件綁定。

我們接上一章的代碼繼續編寫,上一章代碼 https://www.cnblogs.com/weijiutao/p/13195306.html

上一章我們簡單寫了一個demo並跑了起來,我們會發現它和我們電腦上的其他程序軟件一樣有自帶的菜單,如下圖:

本人使用的是Mac,菜單在吸頂欄上,Windows電腦的話會跟隨程序,一般的電腦程序都會有這樣的菜單存在,方便我們進行一些快捷操作,接下來我們就對這個菜單欄進行一下創建定制。

官方關於Menu的解釋地址:https://www.electronjs.org/docs/api/menu

從官方解釋可以看出Menu為主進程的模塊,僅在主進程( main process)中可用, 但您也可以在渲染進程(render process)中通過  remote  模塊使用它。下一章我們可以說一下這個 remote 模塊。

接上一章的目錄下創建一個 menu.js 的文件,目錄如下:

 

 

其中 menu.js 代碼:

 1 const {Menu} = require('electron');
 2 let template = [
 3     {
 4         label: '設置',
 5         submenu: [
 6             {label: '快捷鍵設置'},
 7             {label: '系統設置'}
 8         ]
 9     },
10     {
11         label: '關於',
12         submenu: [
13             {label: '關於Electron'},
14             {label: '關於Node'}
15         ]
16     },
17 ];
18 
19 const menu = Menu.buildFromTemplate(template);
20 Menu.setApplicationMenu(menu);

在上面的代碼中,我們定一了一個數組,其中label為菜單的名稱,submenu為菜單底下的內容,即二級菜單,當然也可以繼續嵌套submenu,就像我們平常寫的樹狀結構一樣。

然后我們將menu.js 引入到我們到主進程中,即index.js中:

 1 const {app, BrowserWindow} = require('electron')
 2 
 3 function createWindow() {
 4     // 創建瀏覽器窗口
 5     const win = new BrowserWindow({
 6         width: 800,
 7         height: 600,
 8         webPreferences: {
 9             nodeIntegration: true
10         }
11     })
12     
13     
14     
15     /**
16      * 引入 menu.js
17      */
18     require('./menu');
19     
20     
21     
22     
23     // 並且為你的應用加載index.html
24     win.loadFile('index.html')
25 
26     // 打開開發者工具
27     win.webContents.openDevTools()
28 }
29 
30 // Electron會在初始化完成並且准備好創建瀏覽器窗口時調用這個方法
31 // 部分 API 在 ready 事件觸發后才能使用。
32 app.whenReady().then(createWindow)
33 
34 //當所有窗口都被關閉后退出
35 app.on('window-all-closed', () => {
36     // 在 macOS 上,除非用戶用 Cmd + Q 確定地退出,
37     // 否則絕大部分應用及其菜單欄會保持激活。
38     if (process.platform !== 'darwin') {
39         app.quit()
40     }
41 })
42 
43 app.on('activate', () => {
44     // 在macOS上,當單擊dock圖標並且沒有其他窗口打開時,
45     // 通常在應用程序中重新創建一個窗口。
46     if (BrowserWindow.getAllWindows().length === 0) {
47         createWindow()
48     }
49 })
50 
51 // 您可以把應用程序其他的流程寫在在此文件中
52 // 代碼 也可以拆分成幾個文件,然后用 require 導入。

至此我們就完成了菜單的修改配置,如下:

需要注意的是我們的Mac電腦菜單的第一個label為系統自定義的名稱,所以我們的“設置”二字並沒有將其替換掉。

在上面的代碼中我們已經重新定義了我們的菜單欄,接下來我們對菜單欄的菜單進行事件綁定,使其能夠作為一個真正的功能使用。

官方為我們的每個菜單提供了一個click方法來幫助我們自定義菜單的綁定事件,如下:

 1 const {Menu, dialog} = require('electron');
 2 const pjson = require('./package.json');
 3 let template = [
 4     {
 5         label: '設置',
 6         submenu: [
 7             {label: '快捷鍵設置'},
 8             {label: '系統設置'}
 9         ]
10     },
11     {
12         label: '關於',
13         submenu: [
14             {
15                 label: '關於Electron',
16                 // 綁定click方法
17                 click: () => {
18                     dialog.showMessageBox({
19                         message: '當前版本:' + pjson.version,
20                     }).then(result => {
21                         console.log(result)
22                     })
23                 }
24             },
25             {label: '關於Node'},
26         ]
27     },
28 ];
29 
30 const menu = Menu.buildFromTemplate(template);
31 Menu.setApplicationMenu(menu);

在上面的代碼中,我們在其中一個submenu子項中添加了一個click事件,並注冊了一個Electron為我們提供的dialog方法來獲取到package.json中的version信息,通過對話框的形式為我們展示出來,最后的結果如下:

至此我們就實現來Electron的菜單創建和事件綁定,其中我們提到了remote模塊和dialog模塊,我會在接下來的內容中繼續為大家說一下,先忙工作去了。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM