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?
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')
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.
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()
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')
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" , )