2013-03-28 3 views
0

창을 표시하고 사용자 입력을 Label에 인쇄하는 프로그램을 만들었으며 이후에 입력 할 내용을 새로운 행의 Label에 추가합니다.Tkinter 레이블에 업데이트 된 텍스트 표시

내 문제는 일단 x 개의 줄이 생기면 텍스트가 Label의 범위를 벗어나고 볼 수 없습니다. 내가하고 싶은 무엇

을 밀어 라벨의 상단에서로 외형을 일으키는 모든 입력의 하단에 배치 된 새로운 입력하는 것입니다. 당신이 레이블 대신 텍스트 위젯 또는 목록 상자를 사용하려면 같은 위젯 상단의 떨어져 일을 스크롤 할 수있는 능력이 있기 때문에

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() 

답변

1

그것은, 소리 :

여기에 지금까지 전체 코드입니다. 그렇지 않으면 레이블의 데이터를 직접 관리해야합니다.

후자의 경우 updateLabel 함수에서 레이블의 기존 내용을 가져 와서 새줄로 나눠서 목록을 제공 할 수 있습니다. 그런 다음 새 항목을 추가하고 목록이 5보다 길면 항목을 해제합니다. 그런 다음 목록을 줄 바꿈과 결합하여 레이블에 다시 넣습니다.