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

3 投票
3 回答
5449 浏览
提问于 2025-04-15 16:27

我想在启动一个基于Tkinter的图形界面应用时隐藏终端窗口,但每当我在Mac上双击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()

我一直找不到任何方法来隐藏终端窗口。有没有人有什么好主意?

3 个回答

0

“console hide”并不会隐藏OS X中的终端。它只是隐藏了Tk自带的控制台,这个控制台其实是从老版MacOS时代遗留下来的东西(在Windows上仍然很常用)。

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中显示,但没有可见的窗口。

我觉得这对其他用户可能会有帮助。

7

在OS X系统中,双击一个.py文件,实际上是通过系统自带的Python Launcher.app启动了一个Python图形界面程序。你可以通过在Finder中选中这个.py文件,然后点击获取信息来确认这一点。Python Launcher是一个非常简单的应用,它通过Terminal.app命令来启动Python。如果你想直接启动自己的Python图形界面应用,推荐的方法是使用py2app来创建一个简单的应用。这里有一个简短的教程在这里

编辑:

当然还有其他方法,但大多数情况下,这些方法可能会增加一些复杂性。要制作一个正常的、可以双击启动的应用,你需要某种应用结构。这正是py2app可以直接帮你创建的。

一个非常简单的替代方法是利用AppleScript编辑器的功能来创建一个启动器应用。在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类似,只是多了一些额外的层。

撰写回答