2014-10-10 193 views

回答

4

入口驗證回調是方式,而%P替換是關鍵。從the docs

%P
項的值,如果編輯被允許。如果您將條目窗口小部件配置爲具有新的文本變量,則這將是該文本變量的值。

這意味着我們做的只是這一點:

pack [entry .e -width 50 -validate all -validatecommand { 
    expr {[string length %P] <= 30} 
}] 

你去那裏,你將無法做任何編輯,這使得它的長度去了30(小部件這可能是最好的還添加一個-invalidcommand規範,以便用戶可以找出發生了什麼。)

+1

感謝您的簡短和甜蜜的解決方案:) +1 – user1336087 2014-10-10 14:59:36

2

我不認爲有一個,但你可以按照如下的輸入小工具使用驗證:

package require Tk 

pack [entry .e -validate all -validatecommand {max_length %s 30 %d}] 

proc max_length {val max act} { 
    if {[string length $val] >= $max && $act == 1} { 
    return 0 
    } 
    return 1 
} 

輸入框會嘗試驗證每個條目,並將當前字符串%s和動作%dproc命名爲max_length

在這個過程中,檢查長度和動作。如果長度大於30並且動作是1(表示插入),則proc將返回0,從而停止再次插入。

+0

如果用戶單擊第一個字符,然後鍵入已有30個字符時該怎麼辦?如果他們在第29位粘貼40個字符會怎麼樣? – 2014-10-10 12:45:10

+0

@BryanOakley好點,並修復。 – Jerry 2014-10-10 13:13:41

+0

@Jerry:謝謝,很好的回答:) +1 – user1336087 2014-10-10 14:57:41