【问题标题】:Make Tkinter widget take focus使 Tkinter 小部件成为焦点
【发布时间】:2023-03-29 15:30:01
【问题描述】:

我有一个脚本,它使用 Tkinter 弹出一个带有消息的窗口。我如何确保它获得焦点,以便用户不会错过它并且明确地必须关闭窗口。代码是:

root = Tk()
to_read = "Stuff" 
w = Label(root, text=to_read)
w.pack()
root.mainloop()

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    您可以使用focus_force 方法。请参阅以下内容:

    但请注意文档:

    w.focus_force()

    强制输入焦点到小部件。这是不礼貌的。最好等待窗口管理器给你焦点。另请参阅下面的 .grab_set_global()。

    更新:它应该在 root 上工作。例如,尝试运行以下代码。它将创建一个窗口,您可以切换焦点。 5秒后,它会尝试抓住焦点。

    from Tkinter import *
    
    root = Tk()
    root.after(5000, lambda: root.focus_force())
    root.mainloop()
    

    【讨论】:

    • 命令没问题,但它在我的代码中的什么位置?看来我的格式将是 root.focus_force,但它给出了一个属性错误。
    • 它现在似乎可以工作了。我省略了 .after 函数。谢谢。
    • @Ali:after 不是必需的:它只是在强制焦点之前引入延迟,以便我可以启动应用程序并有足够的时间将焦点转移到另一个应用程序以进行演示。很高兴它现在对你有用。 :)
    • @ars,当你运行程序时,如何focus_force 获取Text 小部件?因为我用过focus_force,但是有一个问题:IDLEtinter.Text小部件都有自己的光标,但是当我尝试写的时候,它写在交互式IDLE shell上而不是tinter.Text小部件上,即使那里还有一个光标。
    【解决方案2】:

    对我有用的是:

    root.wm_attributes("-topmost", 1)
    root.focus_force()
    

    我在 win32 here 中找到了这个和其他一些方法

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 1970-01-01
      • 2014-04-05
      • 2023-03-20
      • 2012-11-17
      • 1970-01-01
      • 2022-01-16
      • 2019-05-31
      • 2010-12-08
      相关资源
      最近更新 更多