当控制台使用Tkin聚焦时Python捕获事件

2024-04-27 23:09:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个控制台应用程序,并希望实时捕获击键。在另一个窗口获得焦点之前,下面的代码可以完美地工作。从那时起,我就无法回到只在控制台可见的情况下再次捕获击键和其他事件的状态。你知道吗

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()

我尝试过使用各种方法(抓取和聚焦)将焦点重定向到我的应用程序。不过,我只能在控制台中隐藏它。你知道吗

在Tkinter窗口中重复出现和消失的结果如下:

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

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

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


Tags: keyeventapp应用程序bindtkinter状态def
1条回答
网友
1楼 · 发布于 2024-04-27 23:09:43

你不能做你想做的事。Tkinter被设计成大多数GUI工具箱,只在有焦点时处理事件。这就是重点:让操作系统知道在哪里发送事件。你知道吗

它最初工作的事实可能是tkinter中的一个bug。不过,这也许可以解释为,窗口最初有焦点,当您撤回窗口时,操作系统不会移动焦点

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

相关问题 更多 >