[英]Binding multiple events on Tkinter Entry?
我想記錄一個人鍵入密碼所花費的時間(以毫秒為單位),即從第一次按鍵到該人按下Enter
按鈕的時間。 為此,我有以下代碼:
import tkinter as tk
import time
class MyApp(object):
start=0.0
end=0.0
total_time=0.0
def __init__(self, master):
self.pass1 = tk.Entry(master,show="*")
self.pass1.bind('<Key>', self.callback1)
self.pass1.pack()
def callback1(self, event): # Called Only by first key press
self.start=time.time()*1000.0 # start variable must be modified ONLY by first key press
def callback2(self,event): # called by Enter Key press
self.end=time.time()*1000.0
self.total_time=self.start-self.end
print(self.totaltime)
root = tk.Tk()
app = MyApp(root)
root.mainloop()
我遇到的問題是我無法在pass1
上綁定callback1
和callback2
。 我想要的是,當某人按下其密碼的第一個鍵時, start
設置為當前時間,而當該人按下Enter
end
,初始化為當前時間。 我希望這兩點能給我大概的時間。
我如何修改上面的程序來完成我想要的? 謝謝。
首先,您需要將callback2
綁定到Enter / Return Key
這是使用'<Return>'
。
def __init__(self, master):
self.pass1 = tk.Entry(master,show="*")
self.pass1.bind('<Key>', self.callback1)
self.pass1.bind('<Return>', self.callback2) # callback2 bound to Enter / Return key
self.pass1.pack()
接下來,您只想讓callback1運行一次。 為此,請像這樣將其與小部件解除綁定
def callback1(self, event):
self.start=time.time()*1000.0
self.pass1.unbind('<Key>') # unbind callback1
然后一旦按下Enter鍵,最后將其重新綁定,因此在callback2函數中
def callback2(self,event): # called by Enter Key press
self.end=time.time()*1000.0
self.total_time=self.end-self.start
print(self.total_time)
self.pass1.bind('<Key>', self.callback1) # rebind callback1
注意事項:
如您所見,我更改了end - start
時間的順序end - start
而不是您之前的start - end
,這給您帶來了負值。
我還建議將'<Key>'
更改為'<KeyRelease>'
如果您不想取消綁定該功能,則其他選擇是使用if語句檢查self.start
是否具有值。
if self.start == 0.0:
self.start=time.time()*1000.0
您還應該將變量放在__init__
函數中。
def __init__(self, master):
self.start=0.0
self.end=0.0
self.total_time=0.0
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.