it-swarm.com.de

Ändern des Textes auf einem Etikett

Ich habe Probleme mit einer Schlüsselbindung, um den Wert eines Labels oder eines Parameters zu ändern. Dies ist mein Code:

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()

Beim Ausführen klicke ich auf das Eingabefeld und drücke die Eingabetaste, in der Hoffnung, dass das Label den Wert in "Wert ändern" ändert. Während es diesen Text druckt, bleibt das Etikett jedoch unverändert.

Wenn ich mir andere Fragen zu ähnlichen Problemen und Problemen ansah, habe ich mir überlegt, wie man mit einigen davon außerhalb einer Klasse arbeiten kann, aber ich habe einige Schwierigkeiten damit, dies innerhalb einer Klasse zu tun.

Nebenbei bemerkt, welche Rolle spielt "Master" in tkinter?

26
editate
self.labelText = 'change the value'

Im obigen Satz machen Sie mit labelText einen Verweis auf 'change the value', jedoch nicht den Text von DepositLabel.

Verwenden Sie eine der folgenden Anweisungen, um den Text von DepositLabel zu ändern:

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

OR

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

Sie können beim Erstellen des Labels auch eine textvariable definieren und die Textvariable ändern, um den Text im Label zu aktualisieren ..__ Hier ein Beispiel:

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

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

Es ist nicht erforderlich, den Text in depositLabel manuell zu aktualisieren. Tk macht das für Sie.

12
psyFi

Ich habe eine kleine Tkinter-Anwendung erstellt, bei der die Beschriftung nach dem Klicken der Schaltfläche festgelegt wird

#!/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()
2
Harun ERGUL

Hier ist noch einer, denke ich. Nur zur Information . Setzen wir eine Variable als Instanz der Klasse StringVar

Wenn Sie Tk mit der Tcl-Sprache programmieren, können Sie das System bitten, Sie mitzuteilen, wenn eine Variable geändert wird. Das Tk-Toolkit kann diese Funktion, die Ablaufverfolgung genannt, verwenden, um bestimmte Widgets zu aktualisieren, wenn eine zugeordnete Variable geändert wird.

Es gibt keine Möglichkeit, Änderungen an Python-Variablen zu verfolgen, aber Tkinter ermöglicht das Erstellen von variablen Wrappern, die überall dort verwendet werden können, wo Tk kann eine verfolgte Tcl-Variable verwenden.

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

Verwenden Sie die config-Methode, um den Wert des Labels zu ändern:

top = Tk()

l = Label(top)
l.pack()

l.config(text = "Hello World", width = "50" , )
1
Umang Suthar

Es gibt viele Möglichkeiten, ein solches Problem zu lösen. Dafür gibt es viele Möglichkeiten. Ich werde Ihnen die einfachste Lösung für diese Frage geben, die ich kenne. Beim Ändern des Textes eines Etiketts oder irgendeiner Art von Perücke wirklich. Ich würde es so machen.

Name_Of_Label["text"] = "Your New Text"

Wenn ich dieses Wissen auf Ihren Code übertrage. Es würde ungefähr so ​​aussehen.

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["text"] = 'change the value'
    print(self.labelText)

myGUI = MyGUI()

Wenn dies hilft, lassen Sie es mich bitte wissen!

0
Darren Samora