簡體   English   中英

在Tkinter Entry上綁定多個事件?

[英]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上綁定callback1callback2 我想要的是,當某人按下其密碼的第一個鍵時, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM