Видаліть меню з програми Electron


104

Як видалити цей рядок меню зі своїх електронних додатків:

меню-панель

Також там написано "Hello World" (це тому, що я завантажив електрон, побудований заздалегідь, і зникне, як тільки я упакую програму?). Я не кодував їх у html, тому не знаю, як це вивести! -

Відповіді:


149

Ви можете використовувати w.setMenu(null)або встановлювати frame: false(це також видаляє кнопки для закриття, мінімізації та розгортання параметрів) у вашому вікні. Див. SetMenu () або BrowserWindow () . Також перевірте цю тему


Електрон тепер має win.removeMenu()( додано у v5.0.0 ), щоб видалити меню програми, а не використовувати win.setMenu(null).


Здається, у Electron 7.1.x є помилка, де win.removeMenu()не працює. Єдиним обхідним шляхом є використанняMenu.setApplicationMenu(null)


4
frame: falseзробив це за мене.
мвілсон,

5
fwiw removeMenu()призначений лише для Linux та Windows
весна

як щодо вікон, що відкриваються window.open () у вже відкритому вікні, що має меню?
Michael

4
Електронний 7.1.1 має питання де setMenuі removeMenuне працюють посилання
P Fuster

1
Ні оригінал, ні редагування не працюють. Це вже не повинно бути відповіддю.
Tyguy7,

63

Використовуй це:

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)запущена.
Bob Nadler

1
+1 в Arch Linux setMenu(null)не працював, але setMenuBarVisibility(false)працює, як очікувалося (панель неможливо повернути, натиснувши altклавішу, як згадував @Artium).
Amir A. Shabani

Це рішення допомогло мені. Відповідь, яка позначена правильною, не працює на Ubuntu 18.04, Electron v6.0.9
Christoffer

Чудово! Мені потрібен був простий спосіб включити комбінації клавіш без відображення рядка меню. Дякую тонну!
Аніс Р.

26

Для 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
Іунінфрендор

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 (меню) - Встановлює меню як рядок меню вікна, якщо встановити його в нуль, панель меню буде видалено. ( Це повністю видалить меню )

mainWindow.setMenu(null)


---- win.setAutoHideMenuBar (приховати) - Встановлює, чи має панель меню вікна автоматично ховатися. Після установки в рядку меню буде тільки
показувати
, коли користувачі натисніть на єдину клавішу 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

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

Електронна помилка 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! Ми можемо встановити властивості та багато інших на конструкторі

Це доступно для останньої стабільної версії електрону, яка становить 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

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;

Працює, як очікувалося, без меню в браузері.


(electron) 'setAutoHideMenuBar function' застаріла та буде вилучена. Будь ласка, використовуйте замість цього властивість autoHideMenuBar. @ "electron": "^ 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.