繁体   English   中英

Python Tkinter GUI始终最小化加载

[英]Python Tkinter GUI Always loads minimized

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

我曾尝试将lift()添加到Tkiner主窗口中,但似乎没有任何效果(我尝试过类似的方法,但未成功将该窗口置于前景中)。 双击应用程序后,如果GUI不弹出,用户很难说出是怎么回事(特别是如果他们希望某种界面出现的话)。 我正在运行Lion,并且在Leapord上没有此问题。

任何帮助将不胜感激。

谢谢。

我只是面临同样的问题,并找到了普遍原因。 所有已发布的变通办法的问题是它们要么不适用于py2app生成的可执行文件(“最顶”的变通办法不起作用),要么具有严重的副作用(图标化/去图标化工作,但会导致以后所有模态窗口从该应用程序将不再被禁止使用,包括tkMessageBox和tkFileDialog)。

该问题是由py2app的argv_emulation引起的,该默认情况下已启用。 该选项将一些特定于OSX的Carbon事件代码放入应用程序的引导加载程序中,该代码可在构建的应用程序捆绑包的dist / appname / Contents / Resources / __ boot __.py中找到。 我不需要argv_emulation,所以现在我只是通过将py2applet构建的setup.py的OPTIONS词典中的argv_emulation更改为False来禁用该功能:

选项= {'argv_emulation':False}

通过在root.mainloop()之前添加以下内容,我已经能够使tkinter在Lion上发挥出色的作用:

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

好的,我已经找到了有效的解决方案。 从外壳启动不同于启动已编译的应用程序,此解决方案为我的已编译Python / Tkinter应用程序修复了Lion下的后台窗口问题

    root.iconify()
    root.deiconify()

默认情况下,该窗口仍显示在后台,但在调用root.mainloop()之前紧接调用iconify和deiconify之后,该窗口会弹出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM