Python Tkinter GUI始终加载最小化

时间:2012-01-31 17:02:38

标签: python user-interface tkinter osx-lion

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

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

非常感谢任何帮助。

感谢。

3 个答案:

答案 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之后背靠背调用后会弹出窗口