التحقق من صحة الإدخال مع BWidget هو تحرير وسرد

StackOverflow https://stackoverflow.com/questions/1427380

  •  07-07-2019
  •  | 
  •  

سؤال

على 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 الخيار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top