2010-02-15 197 views
4

我有一個Tcl/Tk窗口,輸入框中我想強制輸入大寫字母。也就是說,如果輸入任何字母,我希望它們在輸入字段中以大寫形式出現,而不是簡單地拒絕任何小寫輸入。在Tcl/Tk輸入字段強制輸入大寫字母

我已經看過Tcl/Tk wiki上的entryEntry Validation頁面的文檔,但我不能在正確的位置查找,因爲雖然有很多驗證示例,但我找不到示例過濾鍵輸入來改變情況。

最近我已經能夠得到的是類似以下內容:

entry .message -validate key -validatecommand { 
    .message insert %i [string toupper "%S"] 
    return 0 
} 

這迫使類型爲大寫的第一字符,但隨後的字符不作轉換。實際上,驗證腳本在第一個字符之後根本不被調用。如果我省略了.message insert命令進行測試,則會爲每個字符調用驗證腳本。

回答

5

如果您在驗證命令中爲條目設置了新值,則會關閉驗證(推測可能會阻止無限循環)。然而,你可以把它重新算賬:

entry .message -validate key -validatecommand { 
    .message insert %i [string toupper "%S"] 
    .message configure -validate key 
    return 0 
} 
+1

請注意,我還必須檢查動作類型('%d')以確保它是1(插入),否則刪除文本將無法工作。 –

1

或者您可以使用事件和綁定:

entry .message 
bind .message <KeyRelease> { 
    set v [string toupper [.message get]] 
    .message delete 0 end 
    .message insert 0 $v 
    } 

pack .message 

這讓你可以看看做的事類型的想法 - 在加工事件在這裏很簡單,可以大大改善。