3

当我启动基于 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()

我还没有找到任何方法来隐藏终端窗口的出现。有人有什么想法吗?

4

3 回答 3

7

通过在 OS X 上双击文件,您可能会通过OS X Python 提供.py的 Python gui 实例。Python Launcher.app您可以通过.py在 Finder 中选择文件并对其执行操作来验证这Get Info一点。Python Launcher 是一个非常简单的应用程序,它通过 Terminal.app 命令启动 Python。要直接启动您自己的 Python GUI 应用程序,首选方法是使用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的事情,只是在上面增加了更多的层。

于 2009-11-27T20:47:36.703 回答
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 中,但没有可见窗口。

我认为这可能对其他用户有用。

于 2016-04-26T17:41:12.923 回答
0

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

于 2010-10-01T03:13:12.820 回答