2013-03-28 6 views
0

J'ai créé un programme qui affiche une fenêtre et imprime l'entrée de l'utilisateur dans un Label, et ajoutera toute entrée future au Label sur une nouvelle ligne.Afficher le texte mis à jour dans l'étiquette Tkinter

Mon problème est une fois qu'il obtient x nombre de lignes, le texte sort de la plage de Label, et vous ne pouvez pas le voir.

Ce que je voudrais faire est d'avoir la nouvelle entrée placée au bas de toutes les entrées, provoquant vers le haut poussé vers le haut et hors de la partie supérieure de l'étiquette.

est ici tout le code jusqu'à présent:

from tkinter import * 

string = None 
labelContents = "" 

class App(Frame): 
    def __init__(self, master): 
     Frame.__init__(self, master) 
     self.master = master 
     self.initUI() 

    def initUI(self): 
     global string 
     self.master.title("Tkinter test") 

     string = StringVar() 

     frame = Frame(self, relief=RIDGE, borderwidth=3, width=300, height=50) 
     frame.pack(fill=BOTH, expand=1) 

     label = Label(self, justify=LEFT, relief=RIDGE, borderwidth=3, textvariable=string, width=300, height=5, anchor=NW) 
     label.pack(fill=BOTH, expand=1) 

     self.pack(fill=BOTH, expand=1) 

     self.textEntry = Entry(self) 
     self.textEntry.bind('<Return>', self.updateLabel) 
     self.textEntry.pack(side=TOP, fill=X, padx=5, pady=5) 

     closeButton = Button(self, text="Close", height=1, width=10, command=self.close) 
     closeButton.pack(side=RIGHT, padx=5, pady=5) 

    def close(self): 
     self.master.destroy() 

    def updateLabel(self, event): 
     global string 
     global labelContents 
     labelContents += self.textEntry.get() 
     labelContents += "\n" 
     string.set(labelContents) 
     self.textEntry.delete(0, END) 

def main(): 
    root = Tk() 
    root.geometry("400x500+440+262") 
    root.resizable(0, 0) 
    app = App(root) 
    root.mainloop() 

if __name__ == "__main__": 
    main() 

Répondre

1

Il semble que vous voulez être en utilisant un widget texte ou ListBox au lieu d'une étiquette, car les widgets ont la possibilité de faire défiler les choses hors de la partie supérieure. Sinon, vous devrez gérer vous-même les données de l'étiquette. Pour ce dernier, dans votre fonction updateLabel, vous pouvez d'abord récupérer le contenu existant de l'étiquette, puis le découper sur des retours à la ligne pour vous donner une liste. Ensuite, ajoutez le nouvel élément et supprimez les éléments si la liste est plus longue que 5. Ensuite, joignez la liste avec des retours à la ligne et remettez-la dans l'étiquette.

Questions connexes