我正在使用python和Qt编写一个GUI应用程序。当我在Mac上启动应用程序时,屏幕顶部Mac菜单栏中的第一个菜单项是“Python”。我更喜欢那里的应用程序名而不是我的应用程序名。我怎样才能把我的程序名写上去?
下面的演示程序创建了一个包含两个菜单的窗口:“Python”和“Foo”。我不喜欢这样,因为无论我是用python还是COBOL编写应用程序,对我的用户都没有区别。取而代之的是菜单“我的应用程序”和“Foo”。
#!/usr/bin/python
# This example demonstrates unwanted "Python"
# application menu name on Mac.
# Makes no difference whether we use PySide or PyQt4
from PySide.QtGui import *
# from PyQt4.QtGui import *
import sys
app = QApplication(sys.argv)
# Mac menubar application menu is always "Python".
# I want "DesiredAppTitle" instead.
# setApplicationName() does not affect Mac menu bar.
app.setApplicationName("DesiredAppTitle")
win = QMainWindow()
# need None parent for menubar on Mac to get custom menus at all
mbar = QMenuBar()
# Add a custom menu to menubar.
fooMenu = QMenu(mbar)
fooMenu.setTitle("Foo")
mbar.addAction(fooMenu.menuAction())
win.setMenuBar(mbar)
win.show()
sys.exit(app.exec_())
如何更改Mac上的应用程序菜单名?编辑:如果可能的话,我希望继续使用系统python(或者用户路径上的任何python)。
您似乎需要一个OSX.app才能正常工作,因为其中的
Info.plist
文件包含放在那里的应用程序的用户可见名称。这默认为Python,这是您在程序菜单中看到的标题。This blog文章概述了需要采取的步骤,而OSX Developer Library则在属性列表中包含了需要填写的文档。如果您打算分发应用程序,那么python二进制文件的符号链接就不能保证工作,因为通常在开发机器上,系统python不是默认的python,普通用户很可能不会安装Qt和PyQt。
一个更可靠的方法是使用一个本地OSX引导二进制文件来启动PyQt应用程序。py2app和PyInstaller都可以生成本机包装器。虽然py2app对于创建一个别名为的应用程序很有效,即一个包装器,它可以符号链接到系统上的现有文件,使它只绑定所需的PyQt依赖项,但事实证明这并不简单。此外,如果将py2app生成的带有
--aliased
标志的“别名应用”移动到另一个文件夹,则它将停止工作,因为符号链接是相对于最初运行生成脚本的文件夹的。PyInstaller安装程序
PyInstaller开箱即用,最后我得到了一个OSX包,其中包含了16MB左右的依赖项。
将python脚本绑定到独立的OSX应用程序:
这将生成一个独立的捆绑包,在OSX标题栏中以应用程序名的形式显示
.setWindowTitle()
中的所有内容。-w
开关非常重要,因为它将使用正确的.plist
文件创建一个MacOS应用程序包。注意:由于某些原因,通过} branch from github ,其中:
pip
安装的pyinstaller
版本对我不起作用。所以我删除了最初的pip版本(pip uninstall pyinstaller
),并安装了最新的^{在那之后,它就像一个符咒。
Mac自动机
创建应用程序包装的另一个选项是使用Automator(在Spotlight中键入名称),转到File>;New>;Application>;搜索并将Run shell script拖到编辑器中,然后在shell下选择
bash
,python
。您还可以使用运行apple script并使用apple脚本引导您的应用程序-如果您需要(例如)询问用户的密码以便以提升的权限运行,这将非常有用。Automator的一个更好的替代品是Platypus-一个免费的开源应用程序,它将各种类型的脚本打包到OSX应用程序中,并且还提供一些额外的功能,如gui文本输出窗口、以管理员权限运行、设置自定义图标等。这些代码在github上可用。
还可以选择在Xcode中创建一个barebones OSX应用程序,它将启动PyQt脚本(例如here),并执行应用程序所需的其他自定义任务。
努伊特卡
您可能还想尝试Nuitka(^ {CD11>}),它旨在通过将Python代码转换为C++并编译它来构建真正的本地可执行文件。
使用
nuitka
构建本机应用程序的示例:这将使用
my_build_dir
文件夹中的库创建mac可执行文件。您需要自己将它们包装在MacOS应用程序包中,例如使用Platypus或Automator。我找到了这个问题的核心答案。因为我想把赏金颁给我以外的人(我是OP),请,任何人,拿着这个内核,把它细化成你自己更完整的答案。
我可以将应用程序菜单设置为“MyApp”,如下所示:
要使其工作,需要两个要素:
必须有一个聪明的方法来创建一个应用程序包或shell脚本,以健壮的方式利用这个机制。。。
相关问题 更多 >
编程相关推荐