Скрыть консоль для приложения Tkinter в OSX
Вопрос
Я пытаюсь скрыть терминал при запуске приложения на основе Tkinter с графическим интерфейсом, но когда я дважды щелкаю файл app.py в OSX, появляется окно терминала.Я попытался изменить расширение на .pyw и попытался запустить его с помощью /usr/bin/pythonw, но, несмотря ни на что, окно терминала по-прежнему появляется.
Я даже пытался добавить try / except ниже, но когда я запускаю его, я получаю сообщение об ошибке:"недопустимое имя команды "консоль"" в появившемся окне терминала.
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()
Я не смог найти никакого способа скрыть появление окна терминала.У кого-нибудь есть какие-нибудь идеи?
Решение
Двойным щелчком мыши на .py
файл в OS X, вы, вероятно, запускаете экземпляр графического интерфейса Python через Python Launcher.app
поставляется с OS X Pythons.Вы можете убедиться в этом, выбрав .py
файл в Finder и выполнение Get Info
на нем.Python Launcher - это очень простое приложение, которое запускает Python с помощью команды Terminal.app.Чтобы напрямую запустить ваше собственное приложение с графическим интерфейсом Python, предпочтительным подходом является создание простого приложения с использованием py2app.Там есть краткое руководство здесь.
Редактировать:
Конечно, есть и другие способы, но, скорее всего, любой из них добавит больше уровней косвенности.Чтобы создать обычное запускаемое приложение с "двойным кликом", вам нужна какая-то структура приложения.Вот что py2app
позволяет вам создавать напрямую.
Очень простая альтернатива - воспользоваться возможностями редактора AppleScript для создания приложения-лаунчера.В AppleScript
редактор:
/Applications/Utilities/AppleScript Editor.app
в OS X 10.6/Applications/AppleScript/Script Editor.app
в 10.5
создайте новый скрипт, похожий на этот:
do shell script "/path/to/python /path/to/script.py &> /dev/null &"
а потом Save As..
с File Format -> Application
.Затем у вас появится приложение с двойным щелчком мыши, которое запустит другое приложение.Вы можете создать нечто подобное с помощью Apple Automater.app
.Но под прикрытием они делают нечто подобное тому, что py2app
подходит для вас, просто сверху больше слоев.
Другие советы
Если добавить ответ на вопрос Неда Дейли, то в моем случае, когда я пытался запустить приложение Python с помощью приложения AppleScript, оно изначально не работало. Я обнаружил, что это связано с некоторой ошибкой кодирования (я использую UTF-8, и в прошлом я чувствовал необходимость настроить его на UTF-8).
Итак, после дальнейшего изучения я обнаружил, что могу сделать это, создав приложение AppleScript со следующим кодом (корректируя пути python3 и приложения Python по мере необходимости):
do shell script " export LC_ALL = en_US.UTF-8; экспорт LANG = en_US.UTF-8; / usr / local / bin / python3 '/Users/USER/FOLDER/SCRIPT.py' & amp; > / dev / null & "
Он запускает приложение Python без окон терминала. Затем приложение AppleScript можно персонализировать с помощью обычного значка и поместить в док-станцию. При нажатии запускается интерпретатор Python, который все еще отображается в Dock, но без видимых окон.
Я думаю, что это может быть полезно для других пользователей.
«консоль скрытия» не скрывает Терминал в OS X. Она скрывает встроенную консоль Tk, которая действительно является пережитком времен MacOS Classic (и которая до сих пор широко используется в Windows). Р>