我有一个简单的 Python 脚本,它在运行时加载 GUI(使用 Tkinter 创建)。我使用 py2app 将 Python 脚本转换为适用于 OSX 的双击应用程序。单击应用程序时,Python 会执行脚本。但是,Python(和 GUI)负载最小化。用户必须单击托盘中的 Python 图标才能将 GUI 置于前台。
我已经尝试将 lift() 添加到主 Tkiner 窗口,但它似乎没有任何效果(我尝试了类似的方法但没有成功地将窗口带到前台)。双击应用程序后,如果不弹出 GUI(尤其是当他们希望出现某种界面时),用户很难判断发生了什么。我正在运行 Lion,在 Leapord 上没有这个问题。
如有任何帮助,我们将不胜感激。
谢谢。
最佳答案
我刚刚遇到了同样的问题,并找到了一般原因。所有已发布的解决方法的问题是它们要么不适用于 py2app 构建的可执行文件('-topmost' 解决方法不起作用)要么具有严重的副作用(图标化/去图标化工作但会导致所有 future 的模态窗口从应用程序停止被关闭,包括 tkMessageBox 和 tkFileDialog)。
问题出在py2app的argv_emulation,默认是开启的。该选项将一些特定于 OSX 的 Carbon 事件代码放入应用程序的引导加载程序中,可以在构建的应用程序包的 dist/appname/Contents/Resources/__ boot __.py 中找到。我不需要 argv_emulation 所以现在我只是通过在 py2applet 构建的 setup.py 的 OPTIONS 字典中将 argv_emulation 更改为 False 来禁用该功能:
OPTIONS = { 'argv_emulation' : False }
关于Python Tkinter GUI 始终最小化加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083687/