2017-12-13 28 views
0

I 프레임을 가지고, 이제 가정 해 봅시다 :프레임 내의 버튼 레이블에서 텍스트를 변경하려면 어떻게합니까?

import Tkinter as tk 

class Page1(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label1 = G.tk.Label(self, text="Change me!") 
     label1.pack(pady=10,padx=10) 
     label2 = G.tk.Label(self, text="Change me too!") 
     label2.pack(pady=10,padx=10) 

지금 나는 변경할 수 있도록하고 싶습니다 "나를 변화!" 그리고 "나도 변해!" 텍스트를 페이지의 버튼을 눌러 모두 표시 할 수 있습니다. 구현시 로컬라이제이션을위한 것입니다.

현재의 구현은 각 언어에 대해 별도의 프레임을 갖지만 유지 관리는 엄청납니다. 각 페이지 내용마다 하나의 프레임을 만들고 표시되는 텍스트 만 변경하고 싶습니다. 그게 가능하니?

설명서에 StringVar이 표시되었지만 사용 방법에 대한 명확한 안내는 나와 있지 않습니다.

+0

사용'self.'를 사용할 수 있습니다. – furas

+2

당신은'StringVar'을 사용하여 텍스트를 변경할 필요가 없습니다 - 직접 할 수 있습니다'label1 [ "text"] = "new text"'그러나'self.label1'을 사용하여 다른 레이블에 접근 할 수 있어야합니다 행동 양식. – furas

+0

레이블 구성 방법에 따라 다릅니다. 첫 번째 옵션 :'__init__'에 선언 할'list'에 모든 레이블을 저장하고 반복 할 수 있습니다. 두번째 옵션 : 상속받은'children' dict를 반복 할 수 있습니다. 여기서'label'을위한 각 자식의 타입을 검사 할 것입니다 (중첩 된 프레임에 대해 재귀 적으로 이것을 할 수있는 옵션이 있습니다). 두 경우 모두 레이블의 텍스트를 변경하는 것은 동일합니다. – CommonSense

답변

1

다른 방법으로는 레이블에 액세스하려면 self.label1self.label2을 사용해야합니다.

당신은 Button에 기능을 assing과 다른 방법의 라벨에 액세스 할 수 self.label["text"] = "new text"

import tkinter as tk 

class Page1(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 

     self.label1 = tk.Label(self, text="Change me!") 
     self.label1.pack() 

     self.label2 = tk.Label(self, text="Change me too!") 
     self.label2.pack() 

     button = tk.Button(self, text="Change", command=self.change_text) 
     button.pack() 

    def change_text(self): 
     self.label1["text"] = "New text!" 
     self.label2["text"] = "New text too!" 

root = tk.Tk() 

Page1(root, None).pack() 

root.mainloop()