有没有办法在密钥发布时进行<Return>
事件调用,而不是按?
如果您使用<KeyRelease>
,则event.char
对于任何特殊键都是空白的,而不仅仅是返回。
答案 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()