【发布时间】:2013-01-10 00:27:41
【问题描述】:
我正在使用 Tkinter 在 Python 中编写一个 GUI 程序,我需要一种方法来检查是否发生了按键操作,而无需使用我所有的 cpu。目前我正在使用线程模块来启动一个线程,该线程将检查按键而不冻结界面(Tkinter)。我在线程内的 while 循环中使用 win32api.GetKeyState() 以便它不断检查键的状态,因为即使窗口没有焦点,它也需要能够判断键是否被按下。问题是程序在我启动线程的那一刻使用 100% cpu。如果我将 time.sleep() 放入循环中,它会显着减少 CPU 使用率,但实际按键与知道您正在按键的时间之间存在延迟。 有没有办法在不使用这么多 CPU 的情况下,即使窗口失焦,也能在按键被按下的那一刻捕捉到它?
from Tkinter import *
import win32api
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
coords = StringVar()
Label(master=self, textvariable=coords).pack()
def GetCoords():
coords.set(str(win32api.GetCursorPos()))
root.bind_all("<Scroll_Lock>", self.GetCoords)
root = Tk()
app = Application(master=root)
#root.wm_iconbitmap(default='INSERT ICON HERE')
#root.wm_title("TITLE OF PROGRAM")
#app.master.maxsize(640, 480)
app.master.minsize(640, 480)
app.master.resizable(0, 0)
app.mainloop()
app.quit()
该脚本给了我以下结果: AttributeError:应用程序实例没有属性“GetCoords”
【问题讨论】:
标签: python multithreading winapi tkinter keypress