【问题标题】:Binding multiple events on Tkinter Entry?在 Tkinter 条目上绑定多个事件?
【发布时间】:2015-12-01 13:12:32
【问题描述】:

我想捕获一个人输入密码所用的时间(以毫秒为单位),即从第一次按键到该人按下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被设置为当前时间,当这个人按下Enterend被初始化为当前时间。我希望这两个能给我一个大概的时间。

如何修改上面的程序来完成我想要的?谢谢。

【问题讨论】:

  • “不能”是什么意思?为什么你做不到?您的代码似乎没有尝试这样做。

标签: python tkinter key-bindings


【解决方案1】:

首先,您需要将callback2 绑定到Enter / Return Key,这是使用'&lt;Return&gt;' 完成的。

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

然后最后按回车键重新绑定,所以在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,而不是之前的 start - end,它给您一个负值。

我还建议将'&lt;Key&gt;' 更改为'&lt;KeyRelease&gt;'

如果您不想取消绑定该函数,您的其他选择是使用 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
    ...

【讨论】:

  • 感谢您的回复,它成功了。旁注很有帮助,我自己是 Python 的新手 :)-。我也很难找到一种用 Python 向手机免费发送 SMS 的方法。如果您可以将我链接到演示这一点的教程。谢谢。
  • 很高兴为您提供帮助。不幸的是,我从来没有做过任何接近于用 Python 发送 SMS 的事情,所以我无能为力。
  • 好的,也谢谢。我希望我能做到这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多