2011-11-10 44 views
3

有沒有辦法在密鑰版本上進行<Return>事件調用,而不是按?Tkinter <Return>密鑰發佈事件

如果您使用<KeyRelease>,那麼event.char對於任何特殊鍵都是空白的,而不僅僅是返回。

回答

8

您可以明確設置上的回車鍵的釋放綁定:


要關閉自動重複的Xwindows下。

例如:

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"

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事件,即使你不實際釋放的關鍵。通過結合<KeyRelease-Return>

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() 
+0

感謝你,你知道是否有可能禁用自動密鑰重複? – Ferguzz