Python Tkinter GUI 始终最小化加载

标签 python user-interface tkinter osx-lion

我有一个简单的 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/

相关文章:

python - 最小化 Windows 系统托盘中的窗口 tkinter

python - 从 URL 读取图像、调整其大小并应用抗锯齿

java - 如何使用 Eclipse 构建 GUI? (我只想使用 swing/awt 而没有其他包)

python - 在 Python 中实现任意图像算法时处理边界像素的有效方法

python - Nosetests 断言错误输出格式

python - 将 bytearray 从 VARBINARY(16) 列转换为 IP 地址

python - 如何锁定这些属性?

c# - 动态用户控制变量(嵌入式语言?)

Python tkinter .pack/.pack_forget 内存问题

python - virtualenv 不使用自己的包