OSX上のTkinterアプリのコンソールを非表示にする
質問
GUI Tkinterベースのアプリを起動するときにターミナルを非表示にしようとしていますが、OSXでapp.pyファイルをダブルクリックすると、ターミナルウィンドウが表示されます。拡張子を.pywに変更して/ usr / bin / pythonwで起動しようとしましたが、何があってもターミナルウィンドウは表示されたままです。
以下にもtry / exceptを追加しようとしましたが、実行すると次のエラーが表示されます: 'invalid command name" console"'表示されるターミナルウィンドウで。
from Tkinter import *
class MainWindow(Tk):
def __init__(self):
Tk.__init__(self)
try:
self.tk.call('console', 'hide')
except TclError, err:
print err
win = MainWindow()
win.mainloop()
ターミナルウィンドウを非表示にする方法を見つけることができませんでした。誰かアイデアはありますか?
解決
OS Xで .py
ファイルをダブルクリックすると、OS X Pythonで提供される Python Launcher.app
を介してPython guiインスタンスを起動する可能性があります。確認するには、Finderで .py
ファイルを選択し、そのファイルに対して Get Info
を実行します。 Python Launcherは、Terminal.appコマンドを介してPythonを起動する非常にシンプルなアプリです。独自のPython GUIアプリを直接起動するには、 py2app 。 こちらの簡単なチュートリアルがあります。
編集:
もちろん、他の方法もありますが、おそらくそれらのいずれかがより多くのレベルの間接参照を追加するでしょう。通常の起動可能、「ダブルクリック可能」にするには、アプリケーションでは、何らかのアプリケーション構造が必要です。それが py2app
で直接作成できることです。
非常にシンプルな代替手段は、ランチャーアプリを作成するAppleScript Editorの機能を利用することです。 AppleScript
エディターで:
-
/ Applications / Utilities / AppleScript OS X 10.6のEditor.app
-
/ Applications / AppleScript / Script 10.5のEditor.app
次のような新しいスクリプトを作成します:
do shell script "/path/to/python /path/to/script.py &> /dev/null &"
次に名前を付けて保存...
とファイル形式->アプリケーション
。次に、別のアプリを起動するダブルクリック可能なアプリがあります。 Appleの Automater.app
で似たようなものを作成できます。しかし、隠れて、彼らは py2app
があなたのためにすることと似たようなことをしていて、ちょうど上の層があります。
他のヒント
Ned Deilyによる答えに加えて、AppleScriptアプリケーションを使用してPythonアプリケーションを起動しようとしたときの私の場合、最初は動作しませんでした。ある種のエンコードエラーと関係があることがわかりました(UTF-8を使用しており、過去にUTF-8に設定する必要があると感じていました)。
したがって、さらに調査した結果、次のコードを使用してAppleScriptアプリケーションを作成することでこれを達成できることがわかりました(必要に応じてpython3とPythonアプリケーションのパスを調整します):
do shell script" export LC_ALL = en_US.UTF-8; export LANG = en_US.UTF-8; / usr / local / bin / python3 '/Users/USER/FOLDER/SCRIPT.py'&> / dev / null&"
TerminalウィンドウなしでPythonアプリケーションを起動します。 AppleScriptアプリケーションは、通常どおりカスタムアイコンでパーソナライズでき、Dockに配置できます。クリックすると、Pythonインタープリターが起動し、Dockに表示されますが、ウィンドウは表示されません。
これは他のユーザーにとって役立つと思います。
'console hide'は、OS Xのターミナルを非表示にしません。これは、Tkの組み込みコンソールを非表示にします。