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
' 退出。如何保留隐藏小部件的快捷方式?
在应用程序中。我想添加全屏支持,在这种情况下我想隐藏菜单栏,而且我想将快捷方式保持在全屏模式。
解决方案
我找到了一个可行的解决方案。思路如下:主窗口有一个快捷方式(本例中为'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())
推荐阅读
- kubernetes - 总 CPU 请求高但总使用率低(kubernetes 资源)
- spring-boot - 在 Spring Boot 应用程序中从 Azure Key Vault 检索私钥
- yarnpkg - 纱线发布在 CircleCI 上失败并出现错误,但在本地工作
- sql - 使用 SQL 连接单个表中的对数
- python - 如何将此 .data 文件转换为 CSV
- c# - C# 使用 Adobe Acrobat 10.0 类型库打印 PDF
- css - 将 div 宽度限制为之前兄弟的宽度(使用 @angular/material 和 @angular/flex-layout)
- r - 如何删除r中的行
- oracle-apex - 在交互式网格中对虚拟/创建的列进行排序
- c# - C# dotnet core PCSC 和 OMNIKEY 3121