بيثون: كيفية الحصول على نص إدخال محدث لاستخدامه في أمر يرتديه؟
-
28-09-2019 - |
سؤال
النظر في الرمز التالي:
text = Entry(); text.pack()
def show(e):
print text.get()
text.bind('<Key>', show)
دعنا نقول أنني وضعت الرسائل ABC في الإدخال ، واحدة تلو الأخرى. سيكون الإخراج:
>>>
>>> A
>>> AB
لاحظ أنه عند الضغط على A ، يطبع سلسلة فارغة. عندما أضغط على B ، يطبع A ، وليس AB. إذا لم أضغط على أي شيء بعد C ، فلن يتم عرضه أبدًا. يبدو أن محتوى الإدخال يتم تحديثه فقط بعد إرجاع الأمر المشوش ، لذلك لا يمكنني استخدام قيمة الإدخال الفعلية في هذه الوظيفة.
هل هناك أي طريقة للحصول على قيمة إدخال محدثة لاستخدامها داخل أمر مشدود؟
المحلول
يمكنك استبدال <Key>
حدث مع <KeyRelease>
حدث. التي يجب أن تعمل.
فيما يلي قائمة بالأحداث: http://infohost.nmt.edu/tcc/help/pubs/tkinter/events.html#event-types
نصائح أخرى
السبب في ذلك يتعلق بـ TK "BINDTAGS". ترتبط الروابط بالعلامات ، ويتم معالجة الروابط بترتيب العلامة. كل من أسماء القطعة وفئات القطعة هي علامات ، ويتم معالجتها بهذا الترتيب (الروابط الخاصة بالضغط أولاً ، روابط الفئة الثانية).
لهذا السبب ، في أي وقت تضغط فيه على مفتاح ، سيتم إطلاق الربط المحدد الخاص بك قبل أن يكون لربط الفصل فرصة لتعديل عنصر واجهة المستخدم.
هناك العديد من الحلول. أبسط هو الارتباط بـ <KeyRelease>
منذ أن تحدث روابط الفصل على الصحافة الرئيسية. هناك حلول أخرى تتضمن إما إضافة أو إعادة ترتيب علامات ربط ، أو باستخدام ميزات التحقق من البيانات المدمجة لعنصر أداة الإدخال. ما هو الأفضل يعتمد على ما تحاول تحقيقه حقًا.
لمزيد من المعلومات حول وظائف التحقق من صحة البيانات ، راجع هذا السؤال: التحقق التفاعلي محتوى عنصر واجهة مستخدم الدخول في Tkinter
للحصول على إجابة أكثر شمولاً ، انظر tkinter: تعيين stringvar بعدu003CKey> الحدث ، بما في ذلك المفتاح المضغوط