क्या कोई मुझे यह निर्धारित करने में मदद कर सकता है कि प्रिंट स्टेटमेंट इस कोड के इनपुट से पीछे क्यों हैं? यदि आप इस लघु कार्यक्रम को चलाते हैं और इनपुट प्रविष्टि विजेट में 1,2,3,4,5 टाइप करते हैं, तो विधि को ट्रिगर करने वाली घटना को typed_string Stringvar का वर्तमान मान मिलता है, लेकिन यह इनपुट से 1 पीछे है। क्या कोई समझा सकता है क्यों? बेहतर अभी तक, क्या किसी को इस तरह से पता है कि टेक्स्ट उत्पन्न करने वाले एंट्री विजेट में कोई भी कीप्रेस इनपुट वैरिएबल के प्रदर्शित मान को कॉल करेगा? अजगर का वर्तमान संस्करण 3.8 . है


import tkinter
from tkinter import *

class UI():
    def __init__(self, master):
        self.typed_string = StringVar()
        self.typed_string.set("")

        self.new_entry = tkinter.Entry(master, textvariable=self.typed_string)
        self.new_entry.pack()
        self.new_entry.bind("<Key>",self.check_string)

    def check_string(self, event):
        retrieved_string = self.typed_string.get()
        print(retrieved_string, " was retrieved string")
        print(self.new_entry.get(), " was get for entry widget")

def main():
    root = Tk()
    new_ui = UI(root)
    root.mainloop()

if __name__ == '__main__':
    main()

टर्मिनल आउटपुट के साथ इनपुट फ़ील्ड दिखाया गया है

0
Turbolasers 3 फरवरी 2021, 23:27
1
 – 
Bryan Oakley
3 फरवरी 2021, 23:33

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप प्रतिस्थापित करते हैं:

    self.new_entry.bind("<Key>",self.check_string)

साथ

    self.new_entry.bind("<KeyRelease>",self.check_string)

यह वही करता है जो मुझे लगता है कि आप इसे करना चाहते हैं।

कारण: कुंजी ईवेंट ट्रिगर होता है पहले उस कुंजी का वर्ण StringVar चर में जोड़ा जाता है; या शायद अधिक सटीक रूप से, कुंजी प्रेस संसाधित होने से पहले, जिसका एक परिणाम कुंजी के चरित्र को चर में जोड़ना है यदि यह एक सामान्य प्रिंट करने योग्य कुंजी है। KeyRelease ईवेंट को कीप्रेस के संसाधित होने के बाद ट्रिगर किया जाता है और इसलिए जब आप इसे प्रिंट करने का प्रयास करते हैं तो वर्ण पहले ही वेरिएबल में जोड़ दिया जाता है।

0
Philip C 8 मार्च 2021, 09:47