2009-04-21 5 views
2

Je travaille à donner une interface graphique à un serveur python avec tkinter en passant l'instance racine du serveur à la fenêtre Tkinter. Le problème est de garder les informations dans les étiquettes à jour.Mise à jour des étiquettes tkinter en python

Par exemple, le serveur dispose d'une liste Utilisateurs contenant les utilisateurs connectés. C'est assez simple de le faire pour une liste initiale:

string = "" 
for user in self.server.Users: 
    string += user + "\n" 

Label(master, text=string) 

Mais cela ne le fera qu'une seule fois. Après quoi, comment suis-je censé mettre à jour la liste? Je pourrais ajouter un bouton 'mettre à jour les utilisateurs', mais j'ai besoin que la liste soit mise à jour automatiquement.

Répondre

3

Vous pouvez utiliser des rappels sur l'instance du serveur. Installez un rappel qui met à jour l'étiquette chaque fois que la liste d'utilisateurs change.

Si vous ne pouvez pas modifier le code du serveur, vous devez interroger la liste pour obtenir des mises à jour toutes les quelques secondes. Vous pouvez utiliser le système d'événements Tkinter pour suivre les mises à jour.

def user_updater(self): 
    self.user_updater_id = self.user_label.after(1000, self.user_updater) 
    lines = [] 
    for user in self.server.Users: 
     lines.append(user) 
    self.user_label["text"] = "\n".join(lines) 

def stop_user_updater(self): 
    self.user_label.after_cancel(self.user_updater_id) 
2

Vous modifiez le texte d'un Label en définissant le texte de son objet StringVar correspondant, par exemple:

from tkinter import * 

root = Tk() 
string = StringVar() 
lab = Label(root, textvariable=string) 
lab.pack() 
string.set('Changing the text displayed in the Label') 
root.mainloop() 

Notez l'utilisation de la fonction set pour modifier le texte affiché du Label lab . Voir New Mexico Tech pour plus d'informations.