web-dev-qa-db-fra.com

Changer le texte sur une étiquette

Je ne parviens pas à utiliser une liaison de clé pour modifier la valeur d'une étiquette ou d'un paramètre . C'est mon 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()

Lorsque je lance ceci, je clique sur la zone d'entrée et appuie sur Entrée, en espérant que l'étiquette changera de valeur pour «changer la valeur». Toutefois, bien qu’il imprime ce texte, l’étiquette reste inchangée.

En examinant d’autres questions sur des problèmes similaires, j’ai compris comment travailler avec certaines de ces tâches en dehors d’une classe, mais j’ai des difficultés à le faire en classe.

De plus, quel est le rôle de "maître" dans tkinter?

26
editate
self.labelText = 'change the value'

La phrase ci-dessus fait que labelText se réfère à 'changer la valeur', mais pas le texte de depositLabel.

Pour changer le texte de depositLabel, utilisez l'une des configurations suivantes:

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

OR

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

Vous pouvez également définir une textvariable lors de la création du libellé et modifier la variable textuelle pour mettre à jour le texte dans le libellé .

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

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

Il n'est pas nécessaire de mettre à jour le texte dans depositLabel manuellement. Tk le fait pour vous.

12
psyFi

J'ai fait une petite application tkinter qui définit l'étiquette après avoir cliqué sur le bouton

#!/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

En voici un autre, je pense. Juste pour référence . Définissons une variable pour être une instance de la classe StringVar

Si vous programmez Tk en utilisant le langage Tcl, vous pouvez demander au système de vous informer de la modification d'une variable. Le kit d'outils Tk peut utiliser cette fonctionnalité, appelée traçage, pour mettre à jour certains widgets lorsqu'une variable associée est modifiée.

Il n’existe aucun moyen de suivre les modifications apportées aux variables Python, mais Tkinter vous permet de créer des wrappers de variables pouvant être utilisés partout où Tk peut utiliser une variable Tcl tracée.

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

Utilisez la méthode config pour modifier la valeur de label:

top = Tk()

l = Label(top)
l.pack()

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