python - लेबल पर पाठ बदलना




python-3.x tkinter (4)

मुझे किसी लेबल या किसी पैरामीटर के मान को बदलने के लिए एक बाध्यकारी उपयोग करने में समस्या हो रही है। यह मेरा कोड है:

from tkinter import*

class MyGUI:
  def __init__(self):
    self.__mainWindow = Tk()
    #self.fram1 = Frame(self.__mainWindow)
    self.labelText = 'Enter amount to deposit'
    self.depositLabel = Label(self.__mainWindow, text = self.labelText)
    self.depositEntry = Entry(self.__mainWindow, width = 10)
    self.depositEntry.bind('<Return>', self.depositCallBack)
    self.depositLabel.pack()
    self.depositEntry.pack()

    mainloop()

  def depositCallBack(self,event):
    self.labelText = 'change the value'
    print(self.labelText)

myGUI = MyGUI()

जब मैं इसे चलाता हूं, तो मैं एंट्रीबॉक्स पर क्लिक करता हूं और एंटर दबाता हूं, उम्मीद करता हूं कि लेबल वैल्यू को 'वैल्यू चेंज' में बदल देगा। हालांकि, जब यह उस पाठ को प्रिंट करता है, तो लेबल अपरिवर्तित रहता है।

इसी तरह की समस्याओं और मुद्दों पर अन्य प्रश्नों को देखने से, मैंने पाया है कि कक्षा के बाहर इनमें से कुछ के साथ कैसे काम करना है, लेकिन मुझे कक्षा के अंदर ऐसा करने में कुछ कठिनाइयां हैं।

इसके अलावा, एक तरफ ध्यान दें, tkinter में "मास्टर" क्या भूमिका निभाता है?


मुझे लगता है कि एक और है, मुझे लगता है। बस संदर्भ के लिए। आइए क्लाइंट स्ट्रिंगवार का एक इंस्टेंट होने के लिए एक चर सेट करें

यदि आप टीसीएल भाषा का उपयोग कर प्रोग्राम करते हैं, तो आप एक वैरिएबल बदलते समय सिस्टम को यह बताने के लिए कह सकते हैं। जब कोई संबंधित चर संशोधित होता है तो कुछ टूलकिट अपडेट करने के लिए, टूल टूलिट इस सुविधा का उपयोग कर ट्रेसिंग कहलाता है।

पाइथन चर में परिवर्तनों को ट्रैक करने का कोई तरीका नहीं है, लेकिन टिंकर आपको वेरिएबल रैपर बनाने की अनुमति देता है जिसका उपयोग कहीं भी किया जा सकता है जहां कोई भी ट्रेस किए गए टीसीएल चर का उपयोग कर सकता है।

text = StringVar()
self.depositLabel = Label(self.__mainWindow, text = self.labelText, textvariable = text)
                                                                    ^^^^^^^^^^^^^^^^^
  def depositCallBack(self,event):
      text.set('change the value')

मैंने एक छोटा टिंकर एप्लिकेशन बनाया जो बटन क्लिक करने के बाद लेबल सेट करता है

#!/usr/bin/env python
from Tkinter import *
from tkFileDialog import askopenfilename
from tkFileDialog import askdirectory


class Application:
    def __init__(self, master):
        frame = Frame(master,width=200,height=200)
        frame.pack()

        self.log_file_btn = Button(frame, text="Select Log File", command=self.selectLogFile,width=25).grid(row=0)
        self.image_folder_btn = Button(frame, text="Select Image Folder", command=self.selectImageFile,width=25).grid(row=1)
        self.quite_button = Button(frame, text="QUIT", fg="red", command=frame.quit,width=25).grid(row=5)

        self.logFilePath =StringVar()
        self.imageFilePath = StringVar()
        self.labelFolder = Label(frame,textvariable=self.logFilePath).grid(row=0,column=1)
        self.labelImageFile = Label(frame,textvariable = self.imageFilePath).grid(row = 1,column=1)

        def selectLogFile(self):
            filename = askopenfilename()
            self.logFilePath.set(filename)

        def selectImageFile(self):
            imageFolder = askdirectory()
            self.imageFilePath.set(imageFolder)

root = Tk()
root.title("Geo Tagging")
root.geometry("600x100")
app = Application(root)
root.mainloop()

लेबल बनाने के दौरान आप textvariable को भी परिभाषित कर सकते हैं, और लेबल में टेक्स्ट को अपडेट करने के लिए टेक्स्टवैरिबल को बदल सकते हैं। यहां एक उदाहरण दिया गया है:

labelText = Stringvar()
depositLabel = Label(self, textvariable=labelText)
depositLabel.grid()

def updateDepositLabel(txt) # you may have to use *args in some cases
    labelText.set(txt)

मैन्युअल रूप से depositLabel में पाठ को अपडेट करने की कोई आवश्यकता नहीं है। यह आपके लिए है।


self.labelText = 'change the value'

उपरोक्त वाक्य 'मूल्य बदलें' संदर्भ के लिए लेबलटेक्स्ट बनाते हैं, लेकिन जमा लेबल को नहीं बदलते हैं।

जमा लेबल बदलने के लिए, निम्नलिखित सेटों में से एक का उपयोग करें:

self.depositLabel['text'] = 'change the value'

या

self.depositLabel.config(text='change the value')