【问题标题】:How to handle, when tkinter window gets focus当tkinter窗口获得焦点时如何处理
【发布时间】:2017-06-18 08:37:28
【问题描述】:

我有这个代码:

from tkinter import *
w = Tk()
w.protocol('WM_TAKE_FOCUS', print('hello world'))
mainloop()

它只打印一次hello world,然后停止工作。没有hello world 基本上WM_TAKE_FOCUS 不起作用。

【问题讨论】:

  • “WM_TAKE_FOCUS 基本上不起作用。”:这不是真的!您必须改用:.protocol('WM_TAKE_FOCUS', lambda: print('hello world'))

标签: python tkinter focus protocols


【解决方案1】:

您可以将函数绑定到<FocusIn> 事件。当您绑定到根窗口时,绑定将应用于根窗口中的每个小部件,因此如果您只想在整个窗口获得焦点时执行某些操作,则需要将event.widget 与根窗口进行比较。

例如:

import Tkinter as tk

def handle_focus(event):
    if event.widget == root:
        print("I have gained the focus")

root = tk.Tk()
entry1 = tk.Entry(root)
entry2 = tk.Entry(root)

entry1.pack()
entry2.pack()

root.bind("<FocusIn>", handle_focus)

root.mainloop()

【讨论】:

  • 对于那些搜索,"&lt;FocusOut&gt;" 确实与"&lt;FocusIn&gt;" 相反。
  • 如果&lt;FocusIn&gt; 是第一个事件,你能用它给另一个窗口焦点,它会阻止说一个按钮,首先给我们的窗口焦点?
  • @WinEunuuchs2Unix:是的,当它收到&lt;FocusIn&gt; 事件时,可以将焦点切换到其他小部件。
  • @BryanOakley 好的。但是,假设用户单击了“关闭”按钮,该按钮赋予了窗口焦点。如果我抬起另一个窗口并赋予它焦点,“关闭”点击会被忽略吗?
  • @BryanOakley 忽略最后一个问题。 stackoverflow.com/users/7324618/bimal-paudel下面的答案解决了我的问题。
【解决方案2】:

“请注意,WM_SAVE_YOURSELF 已弃用,Tk 应用程序无法正确实现 WM_TAKE_FOCUS 或 _NET_WM_PING,因此应使用 WM_DELETE_WINDOW ”。 这是a link! 如果您需要始终保持 tkinter 焦点:

w.wm_attributes("-topmost", 1)

做得很好。

【讨论】:

  • 当窗口获得焦点时,我需要做一些事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 2012-02-12
  • 2011-12-06
  • 2011-03-10
相关资源
最近更新 更多