如何在其他窗口上方放置tkinter窗口?

2024-05-19 17:02:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我将Python 2与TkinterPyObjC一起使用,然后使用py2app

程序运行良好,但每当我打开程序时,窗口都会隐藏起来,因此直到我单击停靠板上的图标将其打开时,窗口才会出现。

有什么方法可以控制它,使窗口位于应用程序启动时打开的其他窗口之上吗?

只是澄清一下,它不必在应用程序运行的整个过程中都处于顶层。我只需要它在其他窗户上启动。


Tags: 方法程序程序运行应用程序tkinter过程pyobjc图标
3条回答

我知道这是个老问题,但我觉得奇怪的是没有人想出我的简单解决方案

app = SampleApp()

app.attributes('-topmost', True)
app.update()
app.attributes('-topmost', False)

app.mainloop()

我今天也遇到了同样的问题。OSX狮子10.7.2。在mainloop()解决问题之前添加此代码。

root.call('wm', 'attributes', '.', '-topmost', '1')

但是在你关上窗户之前,它总是在其他的上面。为了真正解决这个问题,我们需要把它做成一个应用程序包,使用py2app。

如果我把你给出的代码加上你得到的第一行和最后一行:

from tkinter import *

root = Tk() 
root.title("app")
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.geometry("550x250+%d+%d" % (screen_width/2-275, screen_height/2-125))
root.configure(background='gold')
root.lift()

mainloop()

测试一下。我如期拿到了窗户。你还有别的东西吗?如果这是可行的,那么在代码的某个地方你告诉它去做。如果它做的事情和你真正的程序一样,那么你的窗口管理器就是这样做的。这是我在没有更多信息的情况下所能做的最好的事情。

编辑:

在OSX(特别是使用aqua的版本)上,tkinter的窗口可能会显示在已经打开的窗口后面(这里有一个错误报告:http://bugs.python.org/issue9384,但已经关闭,无法修复)。添加root.lift()命令是为了在这些情况下使窗口位于堆栈的前面,而在其他情况下则是无害的。

相关问题 更多 >