Menu 如何从串口列表向Electron菜单添加菜单项

Menu 如何从串口列表向Electron菜单添加菜单项,menu,electron,Menu,Electron,在我的electron应用程序中,我使用SerialPort与Arduino设备进行接口。我想在Electron菜单中列出可用的端口(插入arduinos)。 我现在不知道如何将数据从我的renderer.js文件发送到我的主进程,然后在加载我的应用程序之前构建包含所有添加项的菜单 我正在使用此模板构建菜单,并使用以下脚本获取所有串行端口: const模板=[ { 标签:“编辑”, 子菜单:[ {角色:'撤消'}, {角色:'redo'} ] }, { 标签:“端口”, 子菜单:[ { 标签:

在我的electron应用程序中,我使用SerialPort与Arduino设备进行接口。我想在Electron菜单中列出可用的端口(插入arduinos)。 我现在不知道如何将数据从我的
renderer.js
文件发送到我的主进程,然后在加载我的应用程序之前构建包含所有添加项的菜单

我正在使用此模板构建菜单,并使用以下脚本获取所有串行端口:

const模板=[
{
标签:“编辑”,
子菜单:[
{角色:'撤消'},
{角色:'redo'}
]
},
{
标签:“端口”,
子菜单:[
{ 
标签:“选择端口”,
子菜单:[
{label:'Port1'},
{标签:'Port2'},
{标签:'Port3'}
]
}
]
},
{标签:“帮助”}
]
//renderer.js
const serialport=require('serialport')
常量{ipcRenderer}=require('electron')
get_ports=函数(){
console.log('clicked')
serialport.list((错误,端口)=>{
如果(错误){
console.log(错误)
返回
}否则{
console.log(端口)
}
})
}

您可以通过IPC将
serialport.list()
函数提供的端口发送到主进程,在主进程中,您将它们放入模板,然后将其设置为应用程序的菜单

例如,渲染器进程的文件:

const serialport=require(“serialport”);
常数{IPC}=require(“电子”);
get_ports=函数(){
console.log('clicked');
serialport.list((错误,端口)=>{
如果(错误){
console.log(err);
返回;
}否则{
ipcrederer.send(“串行端口”,端口);
}
})
}
然后在主进程的文件中:

//`template'如您的问题所示
const{ipcMain,Menu}=require(“electron”);
ipcMain.on(“串行端口”(事件、数据)=>{
var portsSubmenu=[];
用于(数据中的端口){
portsSubmenu.push({label:port.comName});
}
模板[1]。子菜单[0]。子菜单=portsSubmenu;
Menu.setApplicationMenu(Menu.buildFromTemplate(模板));
});

如果在
“端口”
项之前添加新项,则要修改的子菜单(此处为
模板[1]。子菜单[0]
)的索引将发生更改。

您可以通过IPC将
serialport.list()
函数提供的端口发送到主进程,将它们放在模板中,然后将其设置为应用程序的菜单

例如,渲染器进程的文件:

const serialport=require(“serialport”);
常数{IPC}=require(“电子”);
get_ports=函数(){
console.log('clicked');
serialport.list((错误,端口)=>{
如果(错误){
console.log(err);
返回;
}否则{
ipcrederer.send(“串行端口”,端口);
}
})
}
然后在主进程的文件中:

//`template'如您的问题所示
const{ipcMain,Menu}=require(“electron”);
ipcMain.on(“串行端口”(事件、数据)=>{
var portsSubmenu=[];
用于(数据中的端口){
portsSubmenu.push({label:port.comName});
}
模板[1]。子菜单[0]。子菜单=portsSubmenu;
Menu.setApplicationMenu(Menu.buildFromTemplate(模板));
});

如果您将新项目放在
“端口”
项目之前,则要修改的子菜单(此处为
模板[1]。子菜单[0]
)的索引将发生更改。

非常感谢。这很有效!我一开始很困惑,为什么你说在ipcMain调用中构建菜单,但后来意识到它是在从渲染器发送消息之前构建的。干杯非常感谢你。这很有效!我一开始很困惑,为什么你说在ipcMain调用中构建菜单,但后来意识到它是在从渲染器发送消息之前构建的。干杯