如何在PyQt5中保留隐藏小部件的快捷方式?

时间:2018-05-25 22:37:32

标签: qt pyqt5

我有一个菜单栏,其中包含与之关联的快捷方式。我想隐藏菜单栏,但在这种情况下,相关的快捷方式将被禁用。这是一个例子:

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”退出。我怎样才能保留隐藏小部件的快捷方式?

在应用程序中。我想添加全屏支持,在这种情况下我想隐藏菜单栏,但是,我想将快捷方式保持在全屏模式。

1 个答案:

答案 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())