代码之家  ›  专栏  ›  技术社区  ›  Jan van Wijk

Tkinter:为什么<KeyRelease>不如<KeyPress>精确?

  •  0
  • Jan van Wijk  · 技术社区  · 2 年前

    在我的Tkinter程序中,我需要在一个Entry Widget中捕获所有的按钮按下。这是Entry Widget的总体思想(在最终实现中,打印将被更有用的功能所取代):

    class QuickSearchBox(tk.Entry):
        def __init__(self, parent):
            super().__init__(parent)
            self.var = tk.StringVar()
            self.config(textvariable=self.var)
            self.bind('<KeyPress>', lambda e: print(self.var.get()))
    

    现在我注意到,当快速打字时, <KeyPress> 捕获所有按键(除了最后一次),而 <KeyRelease> 没有。(我正在Windows 10机器上运行PyCharm中的脚本)。

    例如,扣钮 skjdfhkdjfh 具有 <按键> 打印:

    s
    sk
    skj
    skjd
    skjdf
    skjdfh
    skjdfhk
    skjdfhkd
    skjdfhkdj
    skjdfhkdjf
    

    扣扣子时 sjkdfsdkjf 具有 <按键释放> 打印:

    sjkd
    sjkdf
    sjkdf
    sjkdf
    sjkdfsdk
    sjkdfsdkjf
    sjkdfsdkjf
    sjkdfsdkjf
    sjkdfsdkjf
    sjkdfsdkjf
    

    我有两个问题:

    • 如何解释上述行为的差异?
    • 有可能达到 <按键> 当涉及到捕获所有按键时 而且 捕捉最后一次按键(似乎只有在 <按键释放> )?
    0 回复  |  直到 2 年前