2015-08-30 2 views
1

Je dois modifier le contenu d'une entrée à chaque fois que le cadre tkinter est affiché. Voici ce que j'ai jusqu'ici, et cela ne semble pas fonctionner. J'ai essayé d'utiliser data = self.read() puis now.insert(0, data) et cela n'a pas fonctionné non plus. Si la valeur est affichée, elle n'est pas modifiée à chaque fois que la classe ReadLabel1 est appelée.Le contenu du widget d'entrée ne change pas avec l'appel de fonction

class ReadLabel1(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent, bg="blue") 

     label = tk.Label(self, text="SomeData:", font = "Times 12", bg="blue") 
     label.place(x=10, y=100) #ack(pady=5,padx=30) 

     self.smStr = tk.StringVar() 
     now=tk.Entry(self, width=22, textvariable=self.read()) 
     now.place(x=120, y=103) 

    def read(self): 
     # code to get data 
     return data 
+3

La 'textvariable' devrait être un objet' tk.StringVar' ou un objet similaire. – TigerhawkT3

+0

Vous dites que vous voulez changer le contenu d'un widget 'Entry' quand le cadre est affiché, mais à quel contenu vous voulez changer l'entrée? – nbro

+0

Merci pour la correction! J'ai essayé de changer la variable de smStr par la fonction de lecture, mais elle n'affiche aucune valeur. – pyUser01

Répondre

2

Vous devez activer « modifier le contenu d'une entrée » dans un rappel à un paramètre, tour « chaque fois que le cadre tkinter est présenté » en un événement, puis lier ensemble l'application, l'événement et la rappeler. Voici un exemple minimal. Réduire la fenêtre à une icône et la ramener à la position initiale déclenche l'événement Visibilité. Couvrant et découvrant simplement avec une fenêtre différente n'a pas, au moins pas avec Windows. En cliquant sur la fenêtre non couverte, ou simplement inactivée, FocusIn a déclenché. Vous pouvez expérimenter plus avec votre système. J'ai utilisé ce tkinter reference