Tkinterを使用してPythonでGUIプログラムを作成していますが、CPUをすべて使用せずにキー押下が発生しているかどうかを確認する方法が必要です。現在、スレッドモジュールを使用して、インターフェイス(Tkinter)をフリーズせずにキーが押されたことを確認するスレッドを開始しています。スレッド内のwhileループでwin32api.GetKeyState()を使用して、ウィンドウにフォーカスがない場合でもキーが押されているかどうかを判断できる必要があるため、キーのステータスを常にチェックします。問題は、スレッドを開始した瞬間にプログラムが100%CPUを使用することです。time.sleep()をループに入れると、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'がありません