Remover barra de menu do aplicativo Electron

104

Como faço para remover esta barra de menu de meus aplicativos de elétrons:

Barra de menu

Também diz "Hello World" (isso é porque eu baixei o elétron pré-compilado e irei embora assim que eu empacotar o aplicativo?). Não os codifiquei no html, então não sei como retirá-los! -

Sean Letendre
fonte

Respostas:

149

Você pode usar w.setMenu(null)ou definir frame: false(isso também remove botões para fechar, minimizar e maximizar opções) em sua janela. Consulte setMenu () ou BrowserWindow () . Verifique também este tópico


Electron agora win.removeMenu()( adicionado na v5.0.0 ), para remover menus de aplicativos em vez de usar win.setMenu(null).


Electron 7.1.x parece ter um bug que win.removeMenu()não funciona. A única solução alternativa é usarMenu.setApplicationMenu(null)

Tony Vincent
fonte
4
frame: falsefez isso por mim.
mwilson de
5
fwiw removeMenu()é apenas Linux e Windows
primavera
e nas janelas abertas por window.open () em uma janela já aberta com um menu?
Michael
4
O elétron 7.1.1 tem um problema onde setMenue removeMenunão funciona mais link
P Fuster
1
Nem o original nem as soluções de edição funcionam. Essa não deveria mais ser a resposta.
Tyguy7
63

Usa isto:

mainWindow = new BrowserWindow({width: 640, height: 360})
mainWindow.setMenuBarVisibility(false)

Referência: https://github.com/electron/electron/issues/1415

Eu tentei mainWindow.setMenu(null), mas não funcionou.

iHad 169
fonte
2
Tentei mainWindow.setMenu(null)com o elétron 5.0.2 e não funcionou para mim também. Não sei por que vejo conselho para usá-lo em todos os lugares, e estava vagando se sou o único que está fazendo algo incorreto. Seu conselho de usar setMenuBarVisibility, embora remova a visibilidade da barra de menu, não a remove completamente. Ele pode ser trazido de volta pressionando a Alttecla.
Artium
1
FWIW: Com o Election 6.0.X nem .setMenu(null)ou .removeMenu()funcionou para mim. .setMenuBarVisibility(false)remove a barra de menu e a Alttecla só funciona se .setAutoHideMenuBar(true)for executada.
Bob Nadler
1
+1, no Arch Linux, setMenu(null)não funcionou, mas setMenuBarVisibility(false)funciona como esperado (a barra não pode ser trazida de volta pressionando a alttecla como @Artium mencionou).
Amir A. Shabani
Esta é a solução que funcionou para mim. A resposta marcada como correta não funciona no Ubuntu 18.04, Electron v6.0.9
Christoffer
Ótimo! Eu precisava de uma maneira simples de incluir atalhos de teclado sem mostrar a barra de menus. Muito obrigado!
Anis R.
26

Para o Electron 7.1.1, você pode usar este:

const {app, BrowserWindow, Menu} = require('electron')
Menu.setApplicationMenu(false)
Polyvios P
fonte
6
Atualizar edição para mim: Menu.setApplicationMenu(null)funcionou em 7.1.2Outras soluções não funcionou para mim!
TessavWalstijn
1
Ele também funciona em 7.1.4. Atualize a resposta certa para garantir que todos com esse problema possam chegar à solução.
Emilio Numazaki
Funciona para mim no elétron 7.1.6
Iuninefrendor
1
@OP - Bem-vindo ao Stack Overflow e obrigado pela ótima resposta! Uma nota - tenha cuidado ao copiar e colar aspas de outros programas, como o MS Word. As citações formatadas como 'elétron' não são iguais às citações não formatadas como 'elétron' na maioria dos casos.
sfarbota
1
Funciona para mim no elétron 7.19 Isso definitivamente deve ser atualizado como a resposta correta
Darkrender
9

Quando você empacota seu aplicativo, o menu padrão não estará mais lá, se isso estiver incomodando você durante o desenvolvimento, você pode chamar setMenu(null)a janela do navegador como sugerido por @TonyVincent.

Vadim Macagon
fonte
Obrigado por mencionar que empacotar o aplicativo removerá o menu padrão. Eu estava me perguntando sobre esse ponto específico.
raddevus
9

A partir de 7.0.0, a maioria das soluções acima não funciona mais. BrowserWindow.setMenu()foi substituído por Menu.setApplicationMenu(), que agora altera o menu em todas as janelas. setMenu(),removeMenu() não fazem mais nada, que por sinal ainda são mencionados nos documentos.

setAutoHideMenuBar()ainda funciona, mas pode ser um incômodo se você planeja usar Alt como um modificador de tecla de atalho. Assim que o menu estiver visível, você deve clicar fora da janela (foco solto) para ocultar o menu novamente.

Se o seu aplicativo tiver mais de uma janela, você não poderá definir / remover menus separadamente em cada janela. A única maneira de remover um menu é usar a abordagem de janela sem moldura. Isso é o que desejo em meu aplicativo atual, mas não é uma boa solução em todos os casos.

Paul Sorensen
fonte
Obrigado, esta é a única coisa que funciona desde 7.0! Há alguma menção a isso nos docs / changelogs / etc?
rvighne
Há um problema aberto no link do projeto github . Não sei se foi uma suspensão de uso planejada ou um bug.
P Fuster
9

O menu pode ser oculto ou oculto automaticamente (como no Slack ou VS Code - você pode pressionar Alt para mostrar / ocultar o menu).

Métodos relevantes:

---- win.setMenu (menu) - Define o menu como a barra de menus da janela, definindo-o como nulo removerá a barra de menus. ( Isso removerá o menu completamente )

mainWindow.setMenu(null)


---- win.setAutoHideMenuBar (ocultar) - Define se a barra de menus da janela deve se ocultar automaticamente. Uma vez definida, a barra de menus só será
exibida
quando os usuários pressionarem a única tecla Alt .

mainWindow.setAutoHideMenuBar(true)

Fonte: https://github.com/Automattic/simplenote-electron/issues/293

Também existe o método para fazer uma janela sem moldura, conforme mostrado abaixo:

(sem botão de fechar, nada. Pode ser o que queremos (design melhor))

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

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

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

Editar: (novo)

win.removeMenu() Linux Windows Remova a barra de menu da janela.

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

Adicionado win.removeMenu () para remover menus de aplicativos em vez de usar win.setMenu (null)

Isso é adicionado a partir da v5 conforme:

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

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

Bug Electron v7

Para Electron 7.1.1, use em Menu.setApplicationMenuvez dewin.removeMenu()

de acordo com este tópico:
https://github.com/electron/electron/issues/16521

E a grande observação é: você precisa chamá-lo antes de criar o BrowserWindow ! Ou não vai funcionar!

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

Menu.setApplicationMenu(null);

const browserWindow = new BrowserWindow({/*...*/});

UPDATE (Configurando autoHideMenuBar na construção do BrowserWindow)

Como pelo comentário de @kcpr! Podemos definir a propriedade e muitas no construtor

Isso está disponível na última versão estável do elétron agora que é 8.3!
Mas também nas versões antigas eu verifiquei se há v1, v2, v3, v4!
Está disponível em todas as versões!

De acordo com este link
https://github.com/electron/electron/blob/1-3-x/docs/api/browser-window.md

E para a v8.3
https://github.com/electron/electron/blob/v8.3.0/docs/api/browser-window.md#new-browserwindowoptions

O link do documento
https://www.electronjs.org/docs/api/browser-window#new-browserwindowoptions

Do doc para a opção:

autoHideMenuBar Boolean (opcional) - Oculta automaticamente a barra de menus, a menos que a tecla Alt seja pressionada. O padrão é falso.

Aqui está um snippet para ilustrar isso:


let browserWindow = new BrowserWindow({
    width: 800,
    height: 600,
    autoHideMenuBar: true // <<< here
})
Mohamed Allal
fonte
1
setAutoHideMenuBar foi descontinuado
Senhor SirCode
A resposta de Edmar abaixo é uma versão melhor, o código mais recente para autoOcultar o menu
Mister SirCode
1
Em Electron 8.2.5 (Eu suspeito que também nas versões anteriores) é possível definir, que a barra de menu deve estar em auto-ocultar BrowserWindowconstrutor assim: new BrowserWindow({autoHideMenuBar: true}). E, a propósito, obrigado por esta resposta. Parece-me provavelmente o mais completo (assumindo que os métodos ainda existem e não estão obsoletos).
kcpr
@kcpr Obrigado pela sua resposta! Eu atualizei a resposta para refletir isso!
Mohamed Allal
@MohamedAllal, legal! Obrigado, estou feliz por você considerar meu comentário útil. E obrigado, também, pela pesquisa extra que fez e pelos resultados que partilhou.
kcpr
6
@"electron": "^7.1.1" : 

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

Funcionando como esperado sem menu no navegador.

Rachuri
fonte
(elétron) 'função setAutoHideMenuBar' está obsoleta e será removida. Use a 'propriedade autoHideMenuBar' em vez disso. @ "electron": "^ 7.1.1": mainWindow = new browserWindow ({altura: 500, largura: 800}); mainWindow.autoHideMenuBar = true;
Rachuri
3

Seguindo a resposta deste problema , você deve ligar Menu.setApplicationMenu(null) antes que a janela seja criada

Kidoncio
fonte
Ei, bem-vindo ao Stack Overflow! Links para outras respostas são mais adequados como comentários do que como respostas. Isso ocorre porque você não está realmente aplicando a resposta da pergunta vinculada ao cenário específico deste usuário.
David Chopin
2

Antes desta linha em main.js:

mainWindow = new BrowserWindow({width: 800, height: 900})

mainWindow.setMenu(null) //this will r menu bar
Edmar Pereira
fonte
0

Essas soluções têm bug. Ao usar as soluções abaixo, o Windows demora para fechar.

Menu.setApplicationMenu(null),
&&
const updateErrorWindow = new BrowserWindow({autoHideMenuBar: true});

Usei a solução abaixo. Isso é melhor por enquanto.

const window= new BrowserWindow({...});
window.setMenuBarVisibility(false);
Abdurrahman Yıldırım
fonte