qt - 为什么不添加菜单?

标签 qt pyqt pyside qmainwindow

我显然在这里遗漏了一些东西;为什么在这个小示例应用程序中没有添加文件菜单?

import sys
from PySide.QtGui import *

class Window(QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.setWindowTitle('Test')
        layout = QHBoxLayout()
        self.widget = QWidget()
        self.widget.setLayout(layout)
        self.setCentralWidget(self.widget)
        self.exitAction = QAction('Exit', self, shortcut=QKeySequence.Quit, triggered=self.close)
        self.fileMenu = self.menuBar().addMenu('File')
        self.fileMenu.addAction(self.exitAction)

app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())

编辑:

好的,看起来这实际上是一个 unicode 问题。
这是另一个示例应用程序:
from __future__ import unicode_literals, print_function, division
import sys
from PySide.QtCore import *
from PySide.QtGui import *

class Window(QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.dummyAction = QAction(self.tr('dummy'), self, triggered=self.dummy)
        self.gameMenu = self.menuBar().addMenu(self.tr('ddddummy'))
        print (self.tr('dummy'))
        self.gameMenu.addAction(self.dummyAction)
        layout = QHBoxLayout()
        self.widget = QWidget()
        self.widget.setLayout(layout)
        self.setCentralWidget(self.widget)

    def dummy(self):
        pass

locale = QLocale.system().name()
qtTranslator = QTranslator()
app = QApplication(sys.argv)
if qtTranslator.load('qt_' + locale, ':/'):
    app.installTranslator(qtTranslator)
w = Window()
w.show()
sys.exit(app.exec_())

这个应用程序没有"file"或“退出”或“退出”——但如果我注释掉 from __future__ 就可以了。行,或将带引号的字符串括起来,如 self.tr(str('foo'))而不是 self.tr('foo')
编辑2:
from __future__ import unicode_literals
import sys
from PySide.QtGui import *

class Window(QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        print self.tr('foo')

app = QApplication(sys.argv)
Window().show()
sys.exit(app.exec_())

这应该打印 'foo',但什么也不打印。

最佳答案

乍一看,您的代码似乎完全正常,并且在 windows 或 linux 上确实可以正常运行。这里的问题是在 OSX 上,操作系统在菜单上强制执行标准界面。而在其他操作系统上,菜单嵌套在您的应用程序下方,并且您的应用程序拥有它……在 OSX 上,操作系统拥有它。因此它显示在全局菜单区域中。

话虽如此,OSX 正在过滤掉一些保留关键字,如“退出”或“退出”。这样做的原因是退出功能是自动放置在您的应用程序菜单中的标准。当您将它作为基本的 Python 脚本运行时,菜单将被称为“Python”。但是如果你把它捆绑到一个应用程序中,它会根据你捆绑的应用程序相应地命名。

link here ,虽然不是一个确切的解释,但确实提到了 OSX 上菜单的差异。

有关修复菜单的快速示例,请查看执行以下操作时会发生什么:

    self.exitAction = QAction('Kwit', self)

OSX 不会过滤掉那个。但我认为最好遵循原生标准,使平台上的所有应用程序体验相同。您肯定会像现在一样包含“退出”菜单操作,这样如果在 linux 或 Windows 上运行您的应用程序将是跨平台的,并且只期望 OSX 会为您重新定位它。

关于qt - 为什么不添加菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11702621/

相关文章:

c++ - 与第 3 方库链接导致 openssl 中出现段错误

Qt 4.7 SSL 错误 : "The certificate has expired”

python - PyQt 与 Sqlalchemy 的集成

python - 子类化 QGraphicsLayoutItem 以显示像素图

qt - 在哪里可以找到 Qt MessageBox 图标的像素图

c++ - 在 C++ 中的键/值对中按值快速反向查找的建议方法

python - PySide Qt : Drag and drop of an image

python - 如何在 PySide/PyQt 中设置 "read-only checkbox"

python - Qt:QPushButton 被子进程阻塞

python - 在 3 个较小的图像旁边显示一个大图像