2009-11-27 73 views
3

我试图在启动基于GUI Tkinter的应用程序时隐藏终端,但是当我双击OSX上的app.py文件时,终端窗口就会出现。我已经尝试将扩展名更改为.pyw,并尝试使用/ usr/bin/pythonw启动它,但不管如何,终端窗口仍然显示。在OSX上隐藏Tkinter应用程序的控制台

我甚至尝试添加下面的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() 

我一直没有找到任何方法来隐藏终端窗口出现。任何人有任何想法?

回答

7

通过双击OS X上的.py文件,您可能会通过随OS X Pythons提供的Python Launcher.app启动Python gui实例。您可以通过在Finder中选择.py文件并对其执行Get Info来验证。 Python启动器是一个非常简单的应用程序,它通过Terminal.app命令启动Python。要直接启动您自己的Python GUI应用程序,首选方法是使用py2app创建一个简单的应用程序。有一个简短的教程here

编辑:

还有其他的方法,当然,但最有可能的任何人将间接增加更多层次。要制作一个正常启动的“双击”应用程序,您需要某种应用程序结构。这就是py2app可以让你直接创建。

一个非常简单的选择是利用AppleScript编辑器创建启动器应用程序的能力。在AppleScript编辑:

  • 在OS /Applications/Utilities/AppleScript Editor.app 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为您做的事情,只是在顶层有更多图层。

+0

感谢您的链接。那么可以肯定地说,没有办法简单地禁止终端启动而不使用py2app? – cdwilson 2009-11-30 01:00:05

+0

参见上面的编辑。 – 2009-11-30 01:53:10

0

'console hide'并不隐藏OS X中的终端。它隐藏了Tk的内置控制台,这实际上是MacOS Classic时代的遗留物(并且仍然在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 &"

它启动了没有任何Terminal窗口的Python应用程序。 AppleScript应用程序可以像平常一样使用自定义图标进行个性化设置,并且可以放置在Dock中。点击后,它将启动Python解释器,它仍然显示在Dock中,但没有可见的窗口。

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

相关问题