Как добавить пункты меню в Электронное меню из списка последовательных портов - PullRequest
0 голосов
/ 03 марта 2019

В своем электронном приложении я использую SerialPort для взаимодействия с устройствами Arduino.Я хочу перечислить доступные порты (подключенные в Arduinos) в меню Electron.Теперь я не знаю, как я могу отправить данные из моего renderer.js файла в мой основной процесс, а затем создать меню со всеми добавленными в него элементами до загрузки моего приложения.

Я использую этот шаблон дляпостроить мое меню и следующий скрипт для извлечения всех последовательных портов:

const template = [
    {
        label: 'Edit',
        submenu: [
            { role: 'undo' },
            { role: 'redo' }
        ]
    },
    {
        label: 'Ports',
        submenu: [
            { 
                label: 'select port',
                submenu: [
                    { label: 'Port1' },
                    { label: 'Port2' },
                    { label: 'Port3' }
                ]
            }
        ]
    },
    { label: 'Help' }
]
// renderer.js
const serialport = require('serialport')
const { ipcRenderer } = require('electron')

get_ports = function () {
    console.log('clicked')
    serialport.list((err, ports) => {
        if (err) {
            console.log(err)
            return
        } else {
            console.log(ports)
        }
    })
}

1 Ответ

0 голосов
/ 03 марта 2019

Вы можете отправлять порты, которые функция serialport.list () предоставляет через IPC, в ваш основной процесс, где вы помещаете их в шаблон, а затем устанавливаете это как меню вашего приложения.

Например, процесс рендеринга 'file:

const serialport = require ("serialport");
const { ipcRenderer } = require ("electron");

get_ports = function () {
    console.log ('clicked');
    serialport.list ((err, ports) => {
        if (err) {
            console.log (err);
            return;
        } else {
            ipcRenderer.send ("serialports", ports);
        }
    })
}

А затем внутри вашего основного процесса 'file:

// `template' as in your question
const { ipcMain, Menu } = require ("electron");

ipcMain.on ("serialports", (event, data) => {
    var portsSubmenu = [];

    for (port in data) {
        portsSubmenu.push ({ label: port.comName });
    }

    template[1].submenu[0].submenu = portsSubmenu;
    Menu.setApplicationMenu (Menu.buildFromTemplate (template));
});

Индексы подменю, которое вы хотите изменить (здесь template[1].submenu[0]), изменятся, если вы добавите новыйэлементы до вашего "Ports" элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...