gpt4 book ai didi

当控制台具有焦点时,Python 使用 Tkinter 捕获事件

转载 作者:太空宇宙 更新时间:2023-11-03 16:51:28 31 4
gpt4 key购买 nike

我正在构建一个控制台应用程序,并且希望实时捕获击键。以下代码可以完美运行,直到另一个窗口获得焦点。从那时起,我无法回到可以再次捕获击键和其他事件且仅控制台可见的状态。

import tkinter as tk
app = tk.Tk()

def handleKeypress(event):
key = event.char
if(key == 'q'):
app.destroy()
else:
print(key)

app.bind_all('<Key>', handleKeypress)
app.withdraw()
app.mainloop()

我尝试使用各种方法(抓取和聚焦)将焦点重定向到我的应用程序。我能做的最好的事情就是使用 deiconify() 使 Tkinter 窗口可见并处于焦点,但我无法再次隐藏它以使其看起来好像控制台是唯一的窗口。

添加以下结果会导致 Tkinter 窗口反复出现和消失:

def lostFocus(event):
app.deiconify()
app.focus_force()
app.withdraw()

app.bind_all('<FocusOut>', lostFocus)

如何返回应用程序启动后的状态?或者更好的是,我如何强制它获取所有事件,而不必使 Tkinter 窗口可见并处于焦点?

最佳答案

你不能做你想做的事。与大多数 GUI 工具包一样,Tkinter 的设计目的是仅在获得焦点时处理事件。这就是重点:让操作系统知道将事件发送到哪里。

它最初起作用的事实可能是 tkinter 中的一个错误。不过,也许可以用以下事实来解释:窗口最初具有焦点,当您撤回窗口时,操作系统不会移动焦点

恢复焦点的唯一方法是使窗口可见。

关于当控制台具有焦点时,Python 使用 Tkinter 捕获事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35807175/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com