Удалить строку меню из приложения Electron


106

Как удалить эту строку меню из моих электронных приложений:

строка меню

Также там написано «Hello World» (это потому, что я загрузил предварительно собранный электронный файл и исчезнет, ​​как только я упакую приложение?). Я не закодировал их в HTML, поэтому не знаю, как это сделать! -

Ответы:


150

Вы можете использовать w.setMenu(null)или установить frame: false(это также удаляет кнопки для закрытия, свертывания и развертывания параметров) в вашем окне. Смотрите setMenu () или BrowserWindow () . Также проверьте эту ветку


Теперь у Electron есть win.removeMenu()( добавлено в v5.0.0 ), чтобы удалить меню приложений вместо использования win.setMenu(null).


У Electron 7.1.x есть ошибка, где win.removeMenu()не работает. Единственный обходной путь - использоватьMenu.setApplicationMenu(null)


4
frame: falseсделал это для меня.
mwilson

5
fwiw только для removeMenu()Linux и Windows
весна

как насчет окон, открытых с помощью window.open () в уже открытом окне с меню?
Майкл

4
Электронный 7.1.1 имеет вопрос где setMenuи removeMenuне работают ссылки
P Fuster

1
Ни исходное, ни редакционное решение не работают. Это больше не должно быть ответом.
Tyguy7

65

Использовать это:

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

Ссылка: https://github.com/electron/electron/issues/1415

Я пробовал mainWindow.setMenu(null), но не вышло.


2
Я пробовал mainWindow.setMenu(null)с электроном 5.0.2, и у меня тоже не получилось. Не уверен, почему я вижу совет использовать его везде, и бродил, если я единственный, кто что-то делает неправильно. Ваш совет по использованию setMenuBarVisibility, хотя и убирает видимость строки меню, не удаляет ее полностью. Его можно вернуть, нажав кнопку Alt.
Artium

1
FWIW: С выборами 6.0.x ни .setMenu(null)или .removeMenu()работал для меня. .setMenuBarVisibility(false)удаляет строку меню, и Altклавиша работает, только если .setAutoHideMenuBar(true)запущена.
Боб Надлер

1
+1, в Arch Linux, setMenu(null)не работает, но setMenuBarVisibility(false)работает должным образом (панель нельзя вернуть, нажав altклавишу, как упоминалось в @Artium).
Амир А. Шабани

Это решение, которое сработало для меня. Ответ, помеченный как правильный, не работает в Ubuntu 18.04, Electron v6.0.9
Christoffer

Большой! Мне нужен был простой способ включить сочетания клавиш без отображения строки меню. Благодаря тонну!
Анис Р.

27

Для Electron 7.1.1 вы можете использовать это:

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

6
Обновление для меня: Menu.setApplicationMenu(null)работало в 7.1.2Другие решения не работали для меня!
TessavWalstijn

1
Он также работает на 7.1.4. Обновите правильный ответ, чтобы каждый, у кого возникла эта проблема, смог найти решение.
Эмилио Нумадзаки

У меня работает в электроне 7.1.6
Iuninefrendor

1
@OP - Добро пожаловать в Stack Overflow и спасибо за отличный ответ! Одно замечание - будьте осторожны при копировании и вставке кавычек из других программ, таких как MS Word. Отформатированные кавычки, такие как «электрон», в большинстве случаев не то же самое, что неформатированные кавычки, такие как «электрон».
sfarbota

1
У меня работает в электронном 7.19 Это обязательно должно быть обновлено как правильный ответ
Darkrender

9

Когда вы упаковываете свое приложение, меню по умолчанию больше не будет, если это вас беспокоит во время разработки, вы можете вызвать setMenu(null)окно браузера, как это предлагает @TonyVincent.


Благодарим за упоминание о том, что упаковка приложения удалит меню по умолчанию. Мне было интересно об этом конкретном моменте.
raddevus

9

Начиная с версии 7.0.0, большинство вышеперечисленных решений больше не работают. BrowserWindow.setMenu()был заменен на Menu.setApplicationMenu(), который теперь меняет меню во всех окнах. setMenu(), removeMenu()больше ничего не делать, что, кстати, все еще упоминается в документации.

setAutoHideMenuBar()по-прежнему работает, но может быть неприятно, если вы планируете использовать Alt в качестве модификатора горячих клавиш. После того, как меню станет видимым, вам нужно щелкнуть мышью вне окна (свободный фокус), чтобы снова скрыть меню.

Если ваше приложение имеет более одного окна, вы не можете устанавливать / удалять меню отдельно для каждого окна. Единственный способ удалить меню - использовать безрамочный оконный подход. Это именно то, что я хочу в моем текущем приложении, но не во всех случаях хорошее решение.


Спасибо, это единственное, что работает с 7.0! Есть ли упоминания об этом в документации / журналах изменений / и т. Д.?
rvighne

В ссылке на проект github открыта проблема . Не знаю, запланировано ли это прекращение поддержки или ошибка.
P Fuster

9

Меню может быть скрыто или автоматически скрыто (как в Slack или VS Code - вы можете нажать Alt, чтобы показать / скрыть меню).

Соответствующие методы:

---- win.setMenu (меню) - Устанавливает меню в качестве строки меню окна, установка значения null приведет к удалению строки меню. ( Это полностью удалит меню )

mainWindow.setMenu(null)


---- win.setAutoHideMenuBar (hide) - Устанавливает, должна ли строка меню окна автоматически скрываться. После установки строка меню будет
отображаться только
тогда, когда пользователи нажимают одну клавишу Alt .

mainWindow.setAutoHideMenuBar(true)

Источник: https://github.com/Automattic/simplenote-electron/issues/293

Существует также способ создания безрамного окна, как показано ниже:

(нет кнопки закрытия, ничего. Может быть, что мы хотим (лучший дизайн))

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

документ: 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

Электрон v7 ошибка

Для Electron 7.1.1 используйте Menu.setApplicationMenuвместоwin.removeMenu()

согласно этой теме:
https://github.com/electron/electron/issues/16521

И главное примечание: вы должны вызвать его перед созданием BrowserWindow ! Или не пойдет!

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

Menu.setApplicationMenu(null);

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

ОБНОВЛЕНИЕ (настройка autoHideMenuBar при построении BrowserWindow)

Как прокомментировал @kcpr! Мы можем установить свойство и многие из них в конструкторе

Это доступно в последней стабильной версии Electron - 8.3!
Но и в старых версиях я проверял v1, v2, v3, v4!
Он есть во всех версиях!

По этой ссылке
https://github.com/electron/electron/blob/1-3-x/docs/api/browser-window.md

А для v8.3
https://github.com/electron/electron/blob/v8.3.0/docs/api/browser-window.md#new-browserwindowoptions

Ссылка на документ
https://www.electronjs.org/docs/api/browser-window#new-browserwindowoptions

Из документа для варианта:

autoHideMenuBar Boolean (необязательно) - автоматически скрывать строку меню, если не нажата клавиша Alt. По умолчанию - false.

Вот отрывок, чтобы проиллюстрировать это:


let browserWindow = new BrowserWindow({
    width: 800,
    height: 600,
    autoHideMenuBar: true // <<< here
})

1
setAutoHideMenuBar устарел
Mister SirCode

Ответ Эдмара ниже - лучшая версия, последний код для автоматического скрытия меню
Мистер SirCode

1
В Electron 8.2.5 (подозреваю , что и в предыдущих версиях) , то можно определить, что в строке меню должно быть автоматически скрыты в BrowserWindowконструкторе следующим образом: new BrowserWindow({autoHideMenuBar: true}). И, кстати, спасибо за этот ответ. Мне кажется, что это, вероятно, самый полный (при условии, что методы все еще существуют и не устарели).
kcpr

@kcpr Спасибо за ответ! Я обновил ответ, чтобы отразить это!
Мохамед Аллал

@MohamedAllal, круто! Спасибо, я рад, что Вы сочли мой комментарий полезным. И спасибо Вам также за дополнительное исследование, которое Вы провели, и результаты, которыми Вы поделились.
kcpr

6
@"electron": "^7.1.1" : 

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

Работает нормально без меню в браузере.


(электрон) 'setAutoHideMenuBar function' устарела и будет удалена. Вместо этого используйте свойство autoHideMenuBar. @ "электрон": "^ 7.1.1": mainWindow = новое окно браузера ({высота: 500, ширина: 800}); mainWindow.autoHideMenuBar = true;
Рачури


3

После ответа на этот вопрос вы должны позвонить, Menu.setApplicationMenu(null) прежде чем окно будет создано


Привет, добро пожаловать в Stack Overflow! Ссылки на другие ответы лучше подходят в качестве комментариев, чем ответов. Это связано с тем, что вы фактически не применяете ответ в связанном вопросе к конкретному сценарию этого пользователя.
Дэвид Шопен


0

В этих решениях есть ошибка. При использовании решений, указанных ниже, окна закрываются с задержкой.

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

Я использовал решение ниже. Сейчас это лучше.

const window= new BrowserWindow({...});
window.setMenuBarVisibility(false);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.