在OSX上隐藏Tkinter应用的控制台
我想在启动一个基于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 个回答
“console hide”并不会隐藏OS X中的终端。它只是隐藏了Tk自带的控制台,这个控制台其实是从老版MacOS时代遗留下来的东西(在Windows上仍然很常用)。
在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中显示,但没有可见的窗口。
我觉得这对其他用户可能会有帮助。
在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
类似,只是多了一些额外的层。