首页 文章

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

提问于
浏览
6

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

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

3 回答

  • 0

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

  • 0

    你在脚本结束时试过这个吗?

    root.iconify()
    root.update()
    root.deiconify()
    
    root.mainloop()
    
  • 2

    在网上找到的各种其他方法的组合,这适用于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()
    

相关问题