我有一个菜单栏,其中包含与之关联的快捷方式。我想隐藏菜单栏,但在这种情况下,相关的快捷方式将被禁用。这是一个例子:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.InitWindow()
def InitWindow(self):
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu("&File")
mainMenu.hide() # comment it and the shortcut 'q' will work
quitItem = QAction("Quit", self)
quitItem.setShortcut("Q")
quitItem.triggered.connect(self.close)
fileMenu.addAction(quitItem)
if __name__ == "__main__":
App = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(App.exec())
如果您将行mainMenu.hide()
放在评论中,即如果显示菜单栏,那么该应用。将使用快捷方式“q
”退出。我怎样才能保留隐藏小部件的快捷方式?
在应用程序中。我想添加全屏支持,在这种情况下我想隐藏菜单栏,但是,我想将快捷方式保持在全屏模式。
答案 0 :(得分:0)
我找到了一个有效的解决方案。其思路如下:主窗口有一个快捷方式(示例中为“q”),菜单栏也有此快捷方式。为避免冲突,如果菜单栏存在,请禁用窗口的快捷方式。如果隐藏菜单栏,请启用窗口的快捷方式。
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QShortcut
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.shortcutQuit = QShortcut(QKeySequence("q"), self)
self.shortcutQuit.activated.connect(self.close)
self.shortcutQuit.setEnabled(False) # disable it if the menu bar is visible
self.InitWindow()
def InitWindow(self):
self.mainMenu = self.menuBar()
fileMenu = self.mainMenu.addMenu("&File")
hideItem = QAction("Hide Menu Bar", self)
hideItem.setShortcut("h")
hideItem.triggered.connect(self.my_hide)
quitItem = QAction("Quit", self)
quitItem.setShortcut("Q")
quitItem.triggered.connect(self.close)
fileMenu.addAction(hideItem)
fileMenu.addAction(quitItem)
def my_hide(self):
self.mainMenu.hide()
self.shortcutQuit.setEnabled(True)
if __name__ == "__main__":
App = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(App.exec())