在OSX上隐藏Tkinter应用程序的控制台

3
我正在尝试在启动基于GUI Tkinter的应用程序时隐藏终端,但是当我在OSX上双击app.py文件时,终端窗口会出现。我尝试将扩展名更改为.pyw并尝试使用/usr/bin/pythonw启动它,但无论如何,终端窗口仍然会出现。
我甚至尝试添加以下try/except语句,但当我运行它时,我会在出现的终端窗口中得到错误:“无效的命令名称“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()

我找不到隐藏终端窗口的方法。有人有什么想法吗?
3个回答

7
通过在OS X上双击一个.py文件,您很可能会通过OS X Python提供的Python Launcher.app启动Python gui实例。您可以通过在Finder中选择.py文件并对其进行Get Info来验证。Python Launcher是一个非常简单的应用程序,它通过Terminal.app命令启动Python。直接启动自己的Python GUI应用程序的首选方法是使用py2app创建一个简单的应用程序。这里有一个简短的教程here
编辑:
当然,还有其他方法,但最有可能的任何一种都会增加更多的间接层次。要创建一个正常的可启动、“双击”应用程序,您需要某种类型的应用程序结构。这就是py2app让您直接创建的东西。
一个非常简单的替代方法是利用AppleScript Editor创建启动器应用程序。在AppleScript编辑器中:
  • 在OS X 10.6中:/Applications/Utilities/AppleScript Editor.app

  • 在10.5中:/Applications/AppleScript/Script Editor.app

创建一个类似于这样的新脚本:
do shell script "/path/to/python /path/to/script.py &> /dev/null &"

然后使用 另存为... 选项,选择 文件格式 -> 应用程序。这样你就会得到一个可以双击启动的应用程序,它将启动另一个应用程序。你也可以使用苹果公司的 Automater.app 创建类似的东西。但是,在底层,它们正在执行与 py2app 相似的操作,只是在其上有更多的层。


谢谢提供链接。那么可以说,没有使用py2app的方法来简单地抑制终端启动吗? - cdwilson

1
在 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 &"
它启动 Python 应用程序而不显示任何终端窗口。然后,可以像往常一样个性化 AppleScript 应用程序的自定义图标,并将其放置在 Dock 中。单击后,它将启动 Python 解释器,仍会出现在 Dock 中,但没有可见窗口。
我认为这可能对其他用户有用。

0
'console hide' 不会隐藏 OS X 的终端。它会隐藏 Tk 内置的控制台,这是来自 MacOS Classic 时代的遗物(在 Windows 上仍然常用)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接