大多數工具包給出了按鍵和鍵釋放不同的事件。因此,你所需要做的就是爲新聞和發佈事件設置單獨的處理程序。在按下時,用鍵和時間來更新字典,列表,數據庫或其他內容。在發佈時,撤銷該操作。
例如,在Tkinter的關於Python 2.x的可能是這個樣子(雖然這個例子僅僅是跟蹤時被按下的鍵,不是被按下多久的)
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.active = {}
self.label = tk.Label(self, width=50)
self.label.pack(fill="both", expand=True, padx=10, pady=10)
for key in ("a","s","d","f", "h","j", "k", "l"):
self.active[key] = None
self.label.bind("<KeyPress-%s>" % key, self.on_press)
self.label.bind("<KeyRelease-%s>" % key, self.on_release)
self.update_label()
self.label.focus_set()
def update_label(self):
chars = [char for char in self.active.keys() if self.active[char] is not None]
self.label.configure(text="active keys: " + ",".join(sorted(chars)))
def on_press(self, event):
self.active[event.keysym] = event.time
self.update_label()
def on_release(self, event):
self.active[event.keysym] = None
self.update_label()
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
半認真的回答:由於宇宙的相對論性質,沒有「同時」這樣的東西。如果你的程序記錄了一個鍵在另一個鍵之前被按下了一個納秒,當你觀察它們在同一時間發生的時候,它是否真的會產生很大的不同? – Kevin
...和btw:這個問題與你使用的GUI框架高度相關。不知道它是哪一個,沒有人可以幫助你。 – tamasgal
在大多數實現中,按鍵事件進入一個隊列,根據收到的時間標記時間戳,並且事件循環一次處理一個事件。對「同時」進行兩個函數調用的限制(或者,正如@凱文正確地指出,宇宙中的任何兩個事件同時發生)與語言是否被解釋無關。如果您對關鍵事件響應進行了一些研究,則會發現很多解決方案(Python和非Python),這些解決方案對於您的應用程序而言可以很好地工作。 – jez