التحقق من صحة الإدخال مع BWidget هو تحرير وسرد
سؤال
على BWidget تحرير وسرد القطعة يسمح لك لملء في دخول هذا المجال مع قيمة.أود أن تنفذ فقط شخصيات محددة في هذا المجال (على سبيل المثالفقط [a-z0-9]).ولهذا الغرض أود أن استخدام Tcl/Tk هو -validatecommand (أو -vcmd قصيرة) ، تماما كما تفعل مع معيار 'دخول' القطعة:
proc ValidateMyEntry { value } {
# Check if it's alphanum string
if ![regexp {^[-a-zA-Z0-9]*$} $value] {
return 0
}
return 1
}
entry .my_entry -width 20 -textvariable myVar -validate key -vcmd {ValidateMyEntry %P}
يبدو مربع تحرير وسرد لا يدعم -validatecommand.ما هو أفضل ؟
المحلول 2
شيء ممكن ولكن مرهقة بعض الشيء ، قررت استخدام الطراز القديم 'أثر متغير وظيفة لفرض القيم في مربع تحرير وسرد.
وضع البيان التالي بعد تحرير وسرد الاتصال:
trace variable myVar w forceAlphaNum
في مكان آخر, عليك أن تحدد forceAlphaNum proc:
proc forceAlphaNum { name el op } {
if { $el == "" } {
set newname $name
set oldname ${name}_alphanum
} else {
set newname ${name}($el)
set oldname ${name}_alphanum($el)
}
global $newname
global $oldname
if { ![info exist $oldname] } {
set $oldname ""
}
# Check if it's alphanum string
if ![regexp {^[a-zA-Z0-9]*$} [set $newname]] {
set $newname [set $oldname]
bell; return
}
set $oldname [set $newname]
}
نصائح أخرى
إذا كنت ترغب في استخدام BWidget, يمكنك أن تجرب مع -modifycmd أو postcommand.
على أي حال أود أن أقترح عليك أن تجرب ttk::تحرير وسرد مع -postcommand الخيار.
لا تنتمي إلى StackOverflow