dmd*_*dmd 4 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_())
Run Code Online (Sandbox Code Playgroud)
编辑:
好吧,看起来这实际上是一个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_())
Run Code Online (Sandbox Code Playgroud)
这个程序没有"文件"或"退出"或"退出" -但它的工作原理,如果我注释掉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_())
Run Code Online (Sandbox Code Playgroud)
这应该打印'foo',但不打印任何内容.
乍一看,您的代码看起来非常正常,并且它在Windows或Linux上运行正常.这里的问题是在OSX上,操作系统在菜单上强制执行标准接口.而在其他操作系统上,菜单嵌套在您的应用程序下,并且您的应用程序拥有它...在OSX上,操作系统拥有它.因此它显示在全局菜单区域中.
话虽这么说,OSX正在过滤掉一些保留的关键字,如"退出"或"退出".原因是退出功能是自动放置在"应用程序"菜单中的标准.当您将其作为基本python脚本运行时,该菜单将被称为"Python".但是,如果您将其捆绑到应用程序中,它将根据您的捆绑应用程序进行相应命名.
这里的链接虽然不是一个确切的解释,但确实提到了OSX上菜单的不同之处.
有关修复菜单的快速示例,请查看执行操作时会发生什么:
self.exitAction = QAction('Kwit', self)
Run Code Online (Sandbox Code Playgroud)
OSX不会过滤掉那个.但我认为最好遵循原生标准,使平台上的所有应用体验相同.您现在肯定会包含"退出"菜单操作,因此如果在Linux或Windows上运行,您的应用程序将是跨平台的,并且只是期望OSX将为您重新定位它.