我有一个简单的Python脚本,可以在运行时加载GUI(使用Tkinter创建)。我使用py2app将Python脚本转换为OSX的双击应用程序。单击应用程序时,Python将执行该脚本。但是,Python(和GUI)负载最小化。用户必须单击托盘中的Python图标才能将GUI置于前台。
我已经尝试将lift()添加到主Tkiner窗口但它似乎没有任何效果(我尝试了类似的方法,没有成功将窗口带到前台)。双击应用程序后,如果GUI没有弹出,用户很难知道发生了什么(特别是如果他们希望出现某种类型的界面)。我正在运行Lion并且在Leapord上没有这个问题。
非常感谢任何帮助。
感谢。
答案 0 :(得分:4)
我刚遇到同样的问题并找到了一般原因。所有已发布的解决方法的问题在于,它们要么不适用于py2app构建的可执行文件(' -topmost'解决方法没有),要么有严重的副作用(iconify / deiconify工作,但导致应用程序的所有未来模态窗口停止被拒绝,包括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' :假}
答案 1 :(得分:3)
通过在root.mainloop()之前添加以下内容,我已经能够让tkinter在Lion上玩得很好:
root.attributes('-topmost', 1)
root.update()
root.attributes('-topmost', 0)
答案 2 :(得分:1)
好的,我找到了一个有效的解决方案。从shell启动与启动已编译的应用程序不同,此解决方案修复Lion下的后台窗口问题,用于我编译的Python / Tkinter应用程序
root.iconify()
root.deiconify()
默认情况下,窗口仍会显示在后台,但是在rootify.mainloop()调用
之前,在iconify和deiconify之后背靠背调用后会弹出窗口