【问题标题】:Hide console for Tkinter app on OSX在 OSX 上隐藏 Tkinter 应用程序的控制台
【发布时间】:2009-11-27 20:15:36
【问题描述】:

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

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

【问题讨论】:

    标签: python macos tkinter tk


    【解决方案1】:

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

    编辑:

    当然还有其他方法,但很可能其中任何一种方法都会增加更多的间接级别。要制作一个正常的可启动、“可双击”的应用程序,您需要某种应用程序结构。这就是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 为您所做的事情,只是在上面增加了更多层。

    【讨论】:

    • 感谢您的链接。那么可以肯定地说,不使用 py2app 就无法简单地抑制终端启动吗?
    【解决方案2】:

    补充 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 中,但没有可见窗口。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 2011-04-20
        • 1970-01-01
        • 2016-03-30
        • 2011-04-04
        • 1970-01-01
        • 2011-02-15
        相关资源
        最近更新 更多