Menü çubuğunu Electron uygulamasından kaldır


113

Bu menü çubuğunu elektron uygulamalarımdan nasıl kaldırırım:

Menü çubuğu

Ayrıca "Merhaba Dünya" yazıyor (bunun nedeni önceden oluşturulmuş elektron indirdiğim ve uygulamayı paketledikten sonra kaybolacak mı?). Bunları html'ye kodlamadım, bu yüzden nasıl çıkaracağımı bilmiyorum! -

Yanıtlar:


158

Pencerenizde kullanabilir w.setMenu(null)veya ayarlayabilirsiniz frame: false(bu ayrıca kapatma, simge durumuna küçültme ve büyütme seçeneklerini kaldırır). SetMenu () veya BrowserWindow () konusuna bakın . Ayrıca bu konuyu kontrol edin


Electron artık kullanmak yerine uygulama menülerini kaldırmak için win.removeMenu()( v5.0.0'da eklendi ) win.setMenu(null).


Electron 7.1.x'in win.removeMenu()çalışmayan bir hatası var gibi görünüyor . Tek geçici çözüm kullanmaktırMenu.setApplicationMenu(null)


4
frame: falsebenim için yaptı.
mwilson

5
fwiw removeMenu()yalnızca Linux ve Windows'tur
baharı

peki, bir menüsü olan zaten açık bir pencerede window.open () tarafından açılan pencerelerde ne olacak?
Michael

4
Elektron 7.1.1 olan bir sorunu vardır setMenuve removeMenuartık işe yaramamaktadır linki
P Fuster

1
Ne orijinal ne de düzenleme çözümleri çalışmaz. Bu artık cevap olmamalı.
Tyguy7

69

Bunu kullan:

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

Referans: https://github.com/electron/electron/issues/1415

Denedim mainWindow.setMenu(null)ama işe yaramadı.


2
mainWindow.setMenu(null)Elektron 5.0.2 ile denedim ve bende de işe yaramadı. Neden her yerde kullanmamı tavsiye ettiğimi gördüğümden emin değilim ve yanlış bir şey yapan tek kişi ben miyim? Kullanım tavsiyeniz setMenuBarVisibilitymenü çubuğunun görünürlüğünü ortadan kaldırsa da tamamen ortadan kaldırmaz. AltTuşuna basılarak geri getirilebilir .
Artium

1
FWIW: With Seçim 6.0.x ne .setMenu(null)ya .removeMenu()benim için çalıştı. .setMenuBarVisibility(false)menü çubuğunu kaldırır ve Altanahtar yalnızca .setAutoHideMenuBar(true)çalıştırıldığında çalışır.
Bob Nadler

1
1 Arch Linux, setMenu(null)işi değildir, ama setMenuBarVisibility(false)işler (bar beklendiği gibi olamaz basarak geri getirilebilir alt@Artium belirtildiği gibi anahtar).
Amir A. Shabani

Benim için işe yarayan çözüm budur. Doğru olarak işaretlenen cevap Ubuntu 18.04, Electron v6.0.9'da çalışmıyor
Christoffer

Harika! Menü çubuğunu göstermeden klavye kısayollarını eklemenin basit bir yoluna ihtiyacım vardı. Çok teşekkürler!
Anis R.

28

Electron 7.1.1 için şunu kullanabilirsiniz:

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

6
Benim için güncelleme düzenleme: Menu.setApplicationMenu(null)çalıştı 7.1.2Diğer çözümler benim için işe yaramadı!
TessavWalstijn

1
7.1.4'te de çalışır. Bu sorunu yaşayan herkesin çözüme ulaşabileceğinden emin olmak için lütfen doğru yanıtı güncelleyin.
Emilio Numazaki

1
@OP - Stack Overflow'a hoş geldiniz ve harika yanıt için teşekkürler! Bir not - Lütfen MS Word gibi diğer programlardan tırnak işaretlerini kopyalayıp yapıştırırken dikkatli olun. 'Elektron' gibi biçimlendirilmiş alıntılar, çoğu durumda 'elektron' gibi biçimlendirilmemiş alıntılarla aynı değildir.
sfarbota

1
Benim için elektron
7.19'da çalışıyor

1
Bu cevap Electron v10.1.1 için benim için çalıştı. Teşekkürler :)
Maninder Singh

11

Menü gizlenebilir veya otomatik olarak gizlenebilir ( Slack veya VS Code'da olduğu gibi - menüyü göstermek / gizlemek için Alt tuşuna basabilirsiniz ).

İlgili yöntemler:

---- win.setMenu (menü) - Menüyü pencerenin menü çubuğu olarak ayarlar, null olarak ayarlamak menü çubuğunu kaldırır. ( Bu, menüyü tamamen kaldıracaktır )

mainWindow.setMenu(null)


---- win.setAutoHideMenuBar (hide) - Pencere menü çubuğunun kendini otomatik olarak gizleyip gizlemeyeceğini ayarlar. Ayarlandıktan sonra menü çubuğu sadece edecek
göstermek
kullanıcılar zaman basın bekar Alt tuşunu .

mainWindow.setAutoHideMenuBar(true)

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

Aşağıda gösterildiği gibi çerçevesiz bir pencere yapma yöntemi de vardır:

(kapatma düğmesi yok hiçbir şey yok. İstediğimiz şey olabilir (daha iyi tasarım))

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

Düzenleme: (yeni)

win.removeMenu() Linux Windows Pencerenin menü çubuğunu kaldırın.

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

Win.setMenu (null) kullanmak yerine uygulama menülerini kaldırmak için win.removeMenu () eklendi

Bu, v5'ten şu şekilde eklenir:

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

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

Electron v7 hatası

Electron 7.1.1 için Menu.setApplicationMenuyerine kullanınwin.removeMenu()

bu konuya göre:
https://github.com/electron/electron/issues/16521

Ve büyük not şudur: BrowserWindow'u oluşturmadan önce onu aramanız gerekir ! Yoksa işe yaramayacak!

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

Menu.setApplicationMenu(null);

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

GÜNCELLEME (BrowserWindow yapısında autoHideMenuBar'ı ayarlama)

@Kcpr yorumunda olduğu gibi! Özelliği ve birçok yapıcı üzerinde ayarlayabiliriz

Bu, elektronun en son kararlı sürümü olan 8.3'te mevcut!
Ama eski versiyonlarda da v1, v2, v3, v4'ü kontrol ettim!
Tüm versiyonlarda orada!

Bu bağlantıya göre
https://github.com/electron/electron/blob/1-3-x/docs/api/browser-window.md

Ve v8.3 için
https://github.com/electron/electron/blob/v8.3.0/docs/api/browser-window.md#new-browserwindowoptions

Belge bağlantısı
https://www.electronjs.org/docs/api/browser-window#new-browserwindowoptions

Seçenek için dokümandan:

autoHideMenuBar Boolean (isteğe bağlı) - Alt tuşuna basılmadıkça menü çubuğunu otomatik olarak gizler. Varsayılan yanlıştır.

İşte bunu açıklamak için bir pasaj:


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

1
setAutoHideMenuBar kullanımdan kaldırıldı
Mister SirCode

Aşağıdaki Edmar'ın cevabı daha iyi bir sürümdür, menüyü otomatik olarak gizlemek için en son kod
Mister SirCode

1
Electron 8.2.5 yılında menü çubuğu otomatik gizli olması gerektiğini, tanımlamak mümkündür (önceki sürümlerinde de şüpheli) BrowserWindowşöyle yapıcısı: new BrowserWindow({autoHideMenuBar: true}). Ve bu arada, bu cevap için teşekkür ederim. Bana muhtemelen en eksiksiz olanı gibi görünüyor (yöntemlerin hala var olduğunu ve kullanımdan kaldırılmadığını varsayarak).
kcpr

@kcpr Cevabınız için teşekkürler! Cevabı bunu yansıtacak şekilde güncelledim!
Mohamed Allal

@MohamedAllal, harika! Teşekkür ederim, yorumumu faydalı bulduğunuza sevindim. Ayrıca yaptığınız ekstra araştırma ve paylaştığınız sonuçlar için de teşekkür ederim.
kcpr

9

Uygulamanızı paketlediğinizde, varsayılan menü artık orada olmayacak, eğer bu geliştirme sırasında sizi rahatsız ediyorsa setMenu(null), @TonyVincent tarafından önerildiği gibi tarayıcı penceresinden çağrı yapabilirsiniz .


Uygulamanın paketlenmesinin varsayılan menüyü kaldıracağını belirttiğiniz için teşekkür ederiz. Bu özel noktayı merak ediyordum.
raddevus

9

7.0.0'dan itibaren, yukarıdaki çözümlerin çoğu artık çalışmamaktadır. BrowserWindow.setMenu()ile değiştirildi Menu.setApplicationMenu(), artık tüm pencerelerdeki menüyü değiştiriyor. setMenu(), removeMenu()artık hiçbir şey yapmayın, Bu arada hala belgelerde bahsediliyor.

setAutoHideMenuBar()hala çalışıyor, ancak Alt'ı bir kısayol tuşu değiştirici olarak kullanmayı planladıysanız bir sıkıntı olabilir. Menü göründüğünde, menüyü tekrar gizlemek için pencereden uzağa tıklamanız gerekir (odak kaybı).

Uygulamanızın birden fazla penceresi varsa, menüleri her pencerede ayrı ayrı ayarlayamaz / kaldıramazsınız. Bir menüyü kaldırmanın tek yolu çerçevesiz pencere yaklaşımını kullanmaktır. Mevcut başvurumda istediğim şey bu, ancak her durumda iyi bir çözüm değil.


Teşekkürler, 7.0'dan beri çalışan tek şey bu! Dokümanlar / değişiklik günlükleri / vb. İçinde bundan bahsediliyor mu?
rvighne

Github proje bağlantısında açık bir sorun var . Kullanımdan kaldırılması mı yoksa bir hata mı planlandığını bilmiyorum.
P Fuster

7
@"electron": "^7.1.1" : 

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

Tarayıcıda menü olmadan beklendiği gibi çalışıyor.


1
(elektron) 'setAutoHideMenuBar işlevi' kullanımdan kaldırıldı ve kaldırılacak. Lütfen bunun yerine "autoHideMenuBar özelliğini" kullanın. @ "elektron": "^ 7.1.1": mainWindow = yeni browserWindow ({yükseklik: 500, genişlik: 800}); mainWindow.autoHideMenuBar = true;
Rachuri

4

Bu sorunun cevabının ardından, pencere oluşturulmadan Menu.setApplicationMenu(null) önce aramanız gerekir.


Hey, Stack Overflow'a hoş geldiniz! Diğer yanıtların bağlantıları, yanıtlardan çok yorum olarak daha uygundur. Bunun nedeni, bağlantılı sorudaki cevabı bu kullanıcının özel senaryosuna gerçekten uygulamıyor olmanızdır.
David Chopin

4

Bu çözümlerde hata var. Aşağıdaki çözümleri kullandığınızda, pencerelerin kapanmasında gecikme olur.

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

Aşağıda çözüm kullandım. Bu şimdilik daha iyi.

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


3

Bu satırdan önce main.js'de:

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

mainWindow.setMenu(null) //this will r menu bar


1

browserWindow'u oluştururken autoHideMenuBar'ı true olarak ayarlayın

mainWindow = new BrowserWindow({
    autoHideMenuBar: true,
    width: 1200,
    height: 800
})

Electron v8'de çalıştı, teşekkürler
Masoud Tahmasebi

0

2020 Güncellemesi, benim için çalışan tek bl ** dy şey:

Menu.setApplicationMenu(new Menu());

0

setMenu(null);en iyi cevap, autohidemenuuygulamanın başında görüntülenecek


    function createWindow(){
        const win = new BrowserWindow({
            width: 1500,
            height: 800,
            webPreferences:{
                nodeIntergration: true
            }
        });
        win.setMenu(null);
    win.loadFile("index.html");
    }
    app.whenReady().then(createWindow);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.