Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在OSX上隐藏Tkinter应用程序的控制台_Python_Macos_Tkinter_Tk - Fatal编程技术网

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

Python 在OSX上隐藏Tkinter应用程序的控制台,python,macos,tkinter,tk,Python,Macos,Tkinter,Tk,当我启动基于GUI Tkinter的应用程序时,我试图隐藏终端,但当我双击OSX上的app.py文件时,终端窗口出现。我已尝试将扩展名更改为.pyw,并尝试使用/usr/bin/pythonw启动它,但无论如何,终端窗口仍然会出现 from Tkinter import * class MainWindow(Tk): def __init__(self): Tk.__init__(self) try: self.tk.call('

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

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

我无法找到任何方法来隐藏终端窗口。有人有什么想法吗?

通过双击OS X上的
.py
文件,您很可能通过OS X Python附带的
Python Launcher.app
启动Python gui实例。您可以通过在Finder中选择
.py
文件并对其执行
获取信息
来验证这一点。Python Launcher是一个非常简单的应用程序,它通过Terminal.app命令启动Python。要直接启动自己的Python GUI应用程序,首选方法是使用创建一个简单的应用程序。这里有一个简短的教程

编辑:

当然,还有其他的方法,但最有可能的是增加更多的间接层次。要创建一个普通的可启动、“双击”应用程序,您需要某种应用程序结构。这就是
py2app
允许您直接创建的内容

一个非常简单的替代方法是利用AppleScript编辑器创建启动器应用程序的能力。在
AppleScript
编辑器中:

  • /Applications/Utilities/AppleScript
    OS X 10.6中的Editor.app

  • /Applications/AppleScript/Script
    10.5中的编辑器.app

创建一个与此类似的新脚本:

do shell script "/path/to/python /path/to/script.py &> /dev/null &"

然后使用
文件格式->应用程序
另存为..
。然后,您将拥有一个可双击的应用程序,该应用程序将启动另一个应用程序。你可以用苹果的
Automater.app
创建类似的东西。但是,在幕后,他们正在做一些类似于py2app为您所做的事情,只是在上面有更多的层。

'console hide'并没有在OS X中隐藏终端。它隐藏了Tk的内置控制台,这实际上是MacOS经典时代的遗物(在Windows上仍然普遍使用)

对Ned Deily的回答补充说,我的情况是,当我试图使用AppleScript应用程序启动Python应用程序时,它一开始不起作用。我发现它与某种编码错误有关(我正在使用UTF-8,过去我觉得需要将其配置为UTF-8)

因此,在进一步调查之后,我发现我可以通过使用以下代码创建AppleScript应用程序来实现这一点(根据需要调整python3和Python应用程序的路径):

do shell脚本“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 intepreter,它仍然显示在Dock中,但没有可见的窗口


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

谢谢您的链接。那么,如果不使用py2app,就无法简单地阻止终端启动,这是否安全呢?