21

Python と Qt を使用して GUI アプリケーションを作成しています。Mac でアプリケーションを起動すると、画面上部の Mac メニュー バーの最初のメニュー項目が「Python」になります。そこにあるアプリケーション名を自分のアプリケーションの名前にしたいと思います。プログラム名をそこに表示するにはどうすればよいですか?

次のデモ プログラムは、"Python" と "Foo" の 2 つのメニューを含むウィンドウを作成します。私はそれが好きではありません。なぜなら、私がアプリを Python で書いたのか COBOL で書いたのかはユーザーにとって何の違いもないからです。代わりに、メニュー「MyApp」と「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(またはユーザーPATHにあるpython)を引き続き使用したいと思います。

4

6 に答える 6

9

Info.plistそこにあるファイルには、そこに置かれたアプリケーションのユーザーに表示される名前が含まれているため、これが機能するにはOSX .appが必要なようです。これは、プログラム メニューに表示されるタイトルである Python にデフォルト設定されます。このブログ投稿では、実行する必要がある手順の概要を説明していますが、OSX 開発者ライブラリには、入力する必要があるプロパティ リストに関するドキュメントがあります。

于 2011-10-24T12:43:52.003 に答える
5

私はこの質問に対する答えの核心を見つけました。私は私以外の誰か(私はOPです)に賞金を授与したいので、誰でも、このカーネルを取り、あなた自身のより完全な答えにそれを詳しく説明してください。

次のように、アプリケーションメニューを「MyApp」にすることができます。

ln -s /System/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python MyApp

./MyApp MyApp.py

これを機能させるには、次の2つの要素が必要です。

  1. シンボリックリンクには、「MyApp」(またはアプリケーションメニューに表示したいもの)という名前を付ける必要があります。
  2. シンボリックリンクは、システムpythonアプリバンドル内のPython実行可能ファイルを指している必要があります。たとえば、/ usr / bin/pythonにリンクしている場合は機能しません。

このメカニズムを堅牢な方法で活用するアプリバンドルまたはシェルスクリプトを作成するための賢い方法が必要です...

于 2011-10-24T18:23:50.707 に答える
4

アプリを配布する場合、Python バイナリのシンボリック リンクは動作が保証されません。これは、通常、開発マシンではシステム python がデフォルトの python ではなく、通常のユーザーは Qt と PyQt がインストールされていない可能性が高いためです。

より信頼性の高い方法は、PyQt アプリの起動を処理するネイティブ OSX ブートストラップ バイナリを用意することです。py2appPyInstallerはどちらもネイティブ ラッパーを生成できます。py2appはエイリアス化されたアプリ (システム上の既存のファイルにシンボリック リンクを張るラッパー)の作成にはうまく機能しましたが、必要な PyQt 依存関係のみをバンドルすることは自明ではありませんでした。さらに、シンボリックリンクは最初にビルドスクリプトを実行したフォルダーに関連しているため、フラグを使用してpy2appによって生成された「エイリアスアプリ」は、別のフォルダーに移動すると機能しなくなります。--aliased

PyInstaller

PyInstallerはすぐに使用でき、依存関係をすべて含む OSX バンドルが約 16 MB になりました。

Python スクリプトをスタンドアロン OSX アプリにバンドルします。

pyinstaller -w --noconfirm -i=myappicon.icns --clean -F myscript.py

.setWindowTitle()これにより、OSX タイトル バーのアプリ名としてあなたが持っているものを表示するスタンドアロン バンドルが生成されます。このスイッチは、適切なファイル-wを含む MacOS アプリ バンドルを作成するため重要です。.plist

注意: 何らかの理由で、pyinstallerインストールされた viaのバージョンがpip機能しませんでした。そこで、元の pip バージョン ( ) を削除し、github からpip uninstall pyinstaller最新のブランチを次のようにインストールしました。develop

pip install -v -e git+https://github.com/pyinstaller/pyinstaller.git@develop#egg=pyinstaller-github

その後、それは魅力のように機能しました。

マックオートメーター

アプリ ラッパーを作成するもう 1 つのオプションは、Automator (Spotlight で名前を入力) を使用し、[ファイル] > [新規] > [アプリケーション] に移動し、[シェル スクリプトの実行] を検索してエディターにドラッグし、[シェル] でを選択することbashですpythonまた、 Run Applescriptを使用して、 Apple Script を使用してアプリをブートストラップすることもできます。たとえば、昇格された特権で実行するためにユーザーのパスワードを要求する必要がある場合に役立ちます。

Platypusは、さまざまな種類のスクリプトを OSX アプリにラップし、GUI テキスト出力ウィンドウ、管理者権限での実行、カスタム アイコンの設定などの追加機能も提供する無料のオープン ソース アプリです。githubで入手できます。

PyQt スクリプトを起動するベアボーン OSX アプリを Xcode で作成するオプションもあり (ここにいくつかの例があります)、アプリに必要なその他のカスタム タスクを実行します。

注: 定義済みのインタープリターを使用して Python コードを呼び出すアプリ バンドルは「浅い」アプリ バンドルであり、ローカルにインストールした Python 依存関係に依存することに注意してください。ほとんどの場合、他の誰かの Mac では OOTB が機能しません。

ヌイトカ

また、Python コードを C++ に変換してからコンパイルすることで、真にネイティブな実行可能ファイルを構築するプロジェクトを目指すNuitka ( )を試すこともできます。pip3 install nuitka

を使用してネイティブ アプリを構築する例nuitka:

nuitka3 --follow-imports --python-flag=no_site --verbose --standalone --show-progress --show-modules --output-dir=my_build_dir myscript.py

これにより、フォルダー内のライブラリを含む mac 実行可能ファイルが作成されmy_build_dirます。PlatypusAutomatorなどを使用して、MacOS アプリ バンドルに自分でラップする必要があります。

于 2015-12-08T16:48:58.293 に答える
2

これはOPが正確に望んでいるものではないことは知っていますが、この問題の解決策を探すことに価値があると考えました.

ネイティブの Mac OS X システム メニューバーではなく、ウィンドウ UI にファイル メニューを表示することができます。

menubar.setNativeMenuBar(False)

これにより、Windows などで表示されるようにメニューバーが表示されます。

于 2016-09-28T12:51:43.337 に答える
-3

これを行う必要があると思います:

win.setWindowTitle("MyApp")

編集:これはPyQt用です。PySide で同等のものを知りません。

于 2011-10-24T13:58:48.790 に答える