有没有办法在释放键时调用<Return>事件,而不是按键?
如果使用<KeyRelease>,那么对于任何特殊的键,event.char都是空的,而不仅仅是返回。
发布于 2011-11-11 11:12:11
通过绑定到<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()如果您不希望在按return键时发生任何事情,您可以删除缺省绑定,或者创建自己的绑定来返回"break"
发布于 2011-11-11 01:55:12
您可以检查该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()https://stackoverflow.com/questions/8082277
复制相似问题