设置焦点在Tkinter窗口(取决于平台?)

时间:2011-05-23 00:10:48

标签: python python-3.x tkinter focus

我有一个Tkinter程序并运行它:python myWindow.py启动它,但窗口在我用来启动它的终端后面。

有没有办法让它抓住焦点并成为前台应用程序?它取决于平台吗?

3 个答案:

答案 0 :(得分:2)

这可能是您特定窗口管理器的一项功能。要尝试的一件事是,您的应用在创建所有小部件后,在启动时调用focus_force

答案 1 :(得分:0)

你是否在剧本结尾处尝试过这个?

root.iconify()
root.update()
root.deiconify()

root.mainloop()

答案 2 :(得分:0)

在网上找到的各种其他方法的组合,这适用于OS X 10.11和运行在venv中的Python 3.5.1,也适用于其他平台。在OS X上,它还通过进程ID而不是应用程序名称来定位应用程序。

from tkinter import Tk
import os
import subprocess
import platform


def raise_app(root: Tk):
    root.attributes("-topmost", True)
    if platform.system() == 'Darwin':
        tmpl = 'tell application "System Events" to set frontmost of every process whose unix id is {} to true'
        script = tmpl.format(os.getpid())
        output = subprocess.check_call(['/usr/bin/osascript', '-e', script])
    root.after(0, lambda: root.attributes("-topmost", False))

您可以在mainloop()来电之前调用它,如下所示:

raise_app(root)
root.mainloop()