2016-01-06 19 views
0

我想使鍵盤操作快捷command.When我按「B」,打印「B」;而當我按下「S」,打印的'。這裏是我的代碼:如何退出Tkinter中的鍵盤事件?

# -*- coding: utf-8 -*- 
from Tkinter import * 
import tkFont 

root = Tk() 

def pri(event): 
    print event.char 

def rb(): 
    root.bind('<KeyPress-b>',pri) 
    root.bind('<KeyPress-s>',pri) 

v = IntVar() 
def callbackcheck(): 
    if v.get(): 
     rb() 
Cb = Checkbutton(root,variable = v,text = 'Hello',onvalue = 1,offvalue = 0,command = callbackcheck) 
Cb.pack() 

root.mainloop() 

當我將Checkbutton'設置爲',鍵盤事件被激活。但是當我將Checkbutton'關閉'時,鍵盤事件不能退出,當我按'b'時,仍然打印'b'。實際上,鍵盤事件總是運行一次它被激活了。我不知道如何退出鍵盤事件。你有什麼想法嗎?

接下來是一個類似的問題: 當我在Tkinter的使用入門,我只是想輸入數字,而不是字母,我找到一種方法,使用validateCommand。但我不能退出輸入小工具,當我點擊其他區域在當前窗口或輸入字母中。我想要在單擊其他小部件或輸入字母時退出入口小部件,我如何才能實現此目標?

回答

1

當您將Checkbutton設置爲「off」時,您應該刪除與unbind()的綁定。

if v.get(): 
    rb() 
else: 
    root.unbind('<KeyPress-b>') 
    root.unbind('<KeyPress-s>') 
+0

@彭鶴檢查這個。 – Zety

+0

這是工作.Thx。 –

2

EDITED

由於Zetys指出,必須解除綁定鍵命令組合。基於您的代碼:

# -*- coding: utf-8 -*- 
from Tkinter import * 
import tkFont 

root = Tk() 

def pri(event): 
    print (event.char) 

def rb(): 
    if v.get(): 
     root.bind('<KeyPress-b>',pri) 
     root.bind('<KeyPress-s>',pri) 
    else: 
     root.unbind('<KeyPress-b>') 
     root.unbind('<KeyPress-s>') 

v = BooleanVar() 

Cb = Checkbutton(root,variable = v,text = 'Hello', command = rb) 
Cb.pack() 

root.mainloop() 

我改變了幾件事情:

  • 我刪除callbackcheck(RB做現在的伎倆)
  • 我改變了IntVar到BooleanVar,所以它是「真'或'False'(不需要顯式調用值和非值)。
+0

對不起,我更改我的代碼,如果v.get()== 1:但鍵盤事件仍在運行。 –

+0

查看@Zetys的回答!我的壞處:在tkinter中,一直持續運行,直到你明確地停止它爲止。所以你必須在v.get()== 0 ... –

+0

的情況下解開鍵。是的,它工作.Thx。 –