从Electron应用程序中删除菜单栏

Sea*_*dre 59 node.js electron

如何从电子应用中删除此菜单栏:

菜单栏

它也说"Hello World"(这是因为我下载了预先构建的电子,一旦打包应用程序就会消失?).我没有将这些代码编入html中,所以我不知道如何解决它! -

Ton*_*ent 93

您可以在窗口上使用w.setMenu(null)或设置frame: false(这也会删除关闭,最小化和最大化选项的按钮).请参阅setMenu()BrowserWindow().同时检查这个帖子

  • fwiw`removeMenu()`仅适用于Linux和Windows (3认同)
  • 我刚刚创建了一个新应用程序并尝试了“win.removeMenu()”。有效。 (3认同)
  • 电子7.1.1有一个问题,其中setMenu和remove菜单不再起作用[link](https://github.com/electron/electron/issues/21088) (2认同)

iHa*_*169 41

用这个:

mainWindow = new BrowserWindow({width: 640, height: 360})
mainWindow.setMenuBarVisibility(false)
Run Code Online (Sandbox Code Playgroud)

参考:https : //github.com/electron/electron/issues/1415

我尝试过mainWindow.setMenu(null),但是没有用。

  • 我用电子5.0.2尝试了`mainWindow.setMenu(null)`,它也无法正常工作。不知道为什么我建议不要在任何地方使用它,如果我是唯一做错事情的人,那我肯定还在徘徊。您建议使用setMenuBarVisibility,尽管会删除菜单栏的可见性,但不会完全删除它。可以通过按“ Alt”键将其恢复。 (2认同)

小智 35

对于 Electron 7.1.1,你可以使用这个:

const {app, BrowserWindow, Menu} = require('electron')
Menu.setApplicationMenu(false)
Run Code Online (Sandbox Code Playgroud)

  • 对我来说更新编辑:“Menu.setApplicationMenu(null)”在“7.1.2”中工作其他解决方案对我不起作用! (7认同)

Rac*_*uri 8

@"electron": "^7.1.1" : 

mainWindow = new browserWindow({ height: 500, width: 800});
//mainWindow.setAutoHideMenuBar(true);
mainWindow.autoHideMenuBar = true;
Run Code Online (Sandbox Code Playgroud)

在浏览器中没有菜单的情况下按预期工作。


Vad*_*gon 7

当您打包应用程序时,默认菜单将不再存在,如果这在开发过程中困扰您,那么您可以setMenu(null)按照@TonyVincent的建议调用浏览器窗口.


Moh*_*lal 7

菜单可以隐藏自动隐藏(例如在SlackVS Code中 -您可以按Alt来显示/隐藏菜单)。

相关方法:

---- win.setMenu(menu) -将菜单设置为窗口的菜单栏,将其设置为null将删除菜单栏。(这将完全删除菜单

mainWindow.setMenu(null)
Run Code Online (Sandbox Code Playgroud)


---- win.setAutoHideMenuBar(hide) -设置窗口菜单栏是否应该自动隐藏。一旦设置菜单栏将只
显示
当用户按下Alt键

mainWindow.setAutoHideMenuBar(true)
Run Code Online (Sandbox Code Playgroud)

资料来源:https : //github.com/Automattic/simplenote-electron/issues/293

还有一种制作无框窗口的方法,如下所示:

(没有关闭按钮,没有任何内容。可以是我们想要的(更好的设计))

const { BrowserWindow } = require('electron')
let win = new BrowserWindow({ width: 800, height: 600, frame: false })
win.show()
Run Code Online (Sandbox Code Playgroud)

https://electronjs.org/docs/api/browser-window#winremovemenu-linux-windows

doc:https//electronjs.org/docs/api/frameless-window

编辑:(新)

win.removeMenu() Linux Windows删除窗口的菜单栏。

https://electronjs.org/docs/api/browser-window#winremovemenu-linux-windows

添加了win.removeMenu()来删除应用程序菜单,而不是使用win.setMenu(null)

从v5按照以下方式添加:

https://github.com/electron/electron/pull/16570

https://github.com/electron/electron/pull/16657


小智 6

从7.0.0开始,大多数上述解决方案不再起作用。 BrowserWindow.setMenu()已由替换Menu.setApplicationMenu(),现在可以更改所有窗口上的菜单。setMenu()removeMenu()不再执行任何操作,而在文档中仍然提到了这一点。

setAutoHideMenuBar()仍然可以使用,但是如果您打算将Alt用作热键修饰符,可能会很麻烦。菜单可见后,您必须单击远离窗口的位置(松散焦点)以再次隐藏菜单。

如果您的应用程序有多个窗口,则不能在每个窗口上分别设置/删除菜单。删除菜单的唯一方法是使用无框架窗口方法。那恰好是我当前应用程序中想要的,但是在所有情况下都不是一个好的解决方案。


小智 6

这些解决方案有错误。当使用下面的解决方案时,窗口在关闭时有延迟。

Menu.setApplicationMenu(null),
&&
const updateErrorWindow = new BrowserWindow({autoHideMenuBar: true});
Run Code Online (Sandbox Code Playgroud)

我在下面使用了解决方案。这暂时更好。

const window= new BrowserWindow({...});
window.setMenuBarVisibility(false);

Run Code Online (Sandbox Code Playgroud)


Dan*_*ana 6

2020 更新,唯一对我有用的东西:

Menu.setApplicationMenu(new Menu());
Run Code Online (Sandbox Code Playgroud)


Pra*_*ana 6

创建 browserWindow 时将 autoHideMenuBar 设置为 true

mainWindow = new BrowserWindow({
    autoHideMenuBar: true,
    width: 1200,
    height: 800
})
Run Code Online (Sandbox Code Playgroud)


小智 5

按照这个问题的答案,您必须Menu.setApplicationMenu(null) 创建窗口之前调用


小智 5

setMenu(null);是最佳答案, autohidemenu将显示在应用程序启动时


    function createWindow(){
        const win = new BrowserWindow({
            width: 1500,
            height: 800,
            webPreferences:{
                nodeIntergration: true
            }
        });
        win.setMenu(null);
    win.loadFile("index.html");
    }
    app.whenReady().then(createWindow);
Run Code Online (Sandbox Code Playgroud)


小智 5

电子12.0.6

    let mainWindow = new BrowserWindow({
        autoHideMenuBar: true
    });
Run Code Online (Sandbox Code Playgroud)