2012-01-31 133 views
1

我有一个简单的Python脚本,在运行时加载GUI(使用Tkinter创建)。我使用py2app将Python脚本转换为OSX的双击应用程序。当应用程序被点击时,Python执行脚本。但是,Python(和GUI)的负载最小化。用户必须单击托盘中的Python图标才能将GUI带入前台。Python Tkinter GUI总是加载最小化

我已经尝试将lift()添加到主Tkiner窗口,但它似乎没有任何效果(我试过类似的方法,但没有成功将窗口带到前台)。双击应用程序后,用户很难说出如果GUI不弹出(特别是如果他们期望出现某种类型的界面),会发生什么情况。我正在运行Lion,并且在Leapord上没有这个问题。

任何帮助将不胜感激。

谢谢。

+0

是所以现在我只是在由py2applet建造的setup.py选项字典改变argv_emulation为False禁用功能,我不需要argv_emulation你不小心在窗口上调用了'.iconify()'或'.withdraw()'?无论哪种方式,尝试调用'.deiconify()',这应该强制显示。 – 2012-01-31 22:24:28

回答

3

我已经能够通过添加以下root.mainloop()之前获得Tkinter的发挥好于狮子:

root.attributes('-topmost', 1) 
root.update() 
root.attributes('-topmost', 0) 
1

好吧,我发现,工作的解决方案。从外壳启动是不同的,那么推出编译应用程序,这种解决方案修复狮子下的背景窗口问题我编的Python/Tkinter的应用

root.iconify() 
    root.deiconify() 

窗口还是默认在后台出现,但随后后弹出图标化和deiconify被称为回root.mainloop前右后方()调用

4

我只是面临着同样的问题,并发现一般的原因。所有已发布的解决方法的问题是,他们要么不为py2app建造可执行的工作(以下简称“-topmost”处理方法没有)或者有严重的副作用(该图标化/ deiconify作品,但会导致未来的所有模式窗口从该应用程序停止被取消,包括tkMessageBox和tkFileDialog)。

问题是由py2app的argv_emulation,这是默认启用造成的。这种选择使一些OSX专用炭事件代码的应用程序的启动加载器,可在DIST /应用程序的名字/目录中找到/资源/ __你的内置应用程序包的启动__.py。

OPTIONS = {“argv_emulation”:假}