密钥释放时的Tkinter <return>事件</return>

时间:2011-11-10 15:51:34

标签: python tkinter tk

有没有办法在密钥发布时进行<Return>事件调用,而不是按?

如果您使用<KeyRelease>,则event.char对于任何特殊键都是空白的,而不仅仅是返回。

2 个答案:

答案 0 :(得分:8)

您可以通过绑定到<KeyRelease-Return>来显式设置对返回键释放的绑定。

例如:

import Tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.text = tk.Text(self)
        self.text.pack()
        self.text.bind("<KeyRelease-Return>", self.on_return_release)

    def on_return_release(self, event):
        self.text.insert("end", "boink! ")

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()

如果您不希望在返回键的上发生任何事情,您可以删除默认绑定,或创建自己的绑定,返回"break"

答案 1 :(得分:3)

您可以检查event.keysym=='Return'

class App(object):
    def __init__(self, master, **kwargs):
        self.master=master
        master.bind('<KeyRelease>',self.release)
    def release(self,event):
        if event.keysym=='Return':
            print('Return Release')
root=tk.Tk()
app=App(root)
root.mainloop()

请注意,如果您有自动键重复,那么即使您没有实际释放密钥,也会有KeyRelease事件。


在Xwindows下关闭自动重复:

import Xlib.display as display
import Xlib.X as X
import Tkinter as tk
import atexit

@atexit.register
def autorepeat():
    d=display.Display()    
    d.change_keyboard_control(auto_repeat_mode=X.AutoRepeatModeOn)
    x=d.get_keyboard_control()    

class App(object):
    def __init__(self, master, **kwargs):
        self.master=master
        master.bind('<KeyRelease>',self.release)
    def release(self,event):
        if event.keysym=='Return':
            print('Return Release')

d=display.Display()
d.change_keyboard_control(auto_repeat_mode=X.AutoRepeatModeOff)
x=d.get_keyboard_control()
root=tk.Tk()
app=App(root)
root.mainloop()