在Tkinter窗口上设置焦点(与平台相关?)

7 投票
3 回答
4031 浏览
提问于 2025-04-16 18:09

我有一个用Tkinter写的程序,当我用命令 python myWindow.py 来运行它时,窗口是正常打开的,但它却在我用来启动它的终端窗口后面。

有没有办法让这个窗口获得焦点,成为最前面的应用程序?这是否和操作系统有关?

3 个回答

0

这段内容是结合了网上找到的几种方法,适用于OS X 10.11和在虚拟环境中运行的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()
0

你有没有在你的脚本最后加上这个呢?

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

root.mainloop()
2

这可能是你使用的窗口管理器的一个特性。你可以试试让你的应用在启动时,在所有组件都创建好之后,调用一下 focus_force 这个函数。

撰写回答