بيثون: كيفية الحصول على نص إدخال محدث لاستخدامه في أمر يرتديه؟

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

  •  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> الحدث ، بما في ذلك المفتاح المضغوط

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