在Tkinter窗口上设置焦点(与平台相关?)
我有一个用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
这个函数。