2017-01-23 2 views
0

아래 스크립트에서 "self"와 "root"에 각각 button_01과 button_02가 생성됩니다. 생성 된 기능적 차이점이 있습니까? GUI는 같은 방법으로 보입니다.파이썬 클래스에서 버튼을 만들 때 "self"와 "root"가 다릅니 까?

import Tkinter as tk 

class App(tk.Frame): 
    def __init__(self, *args, **kwargs): 
     tk.Frame.__init__(self, *args, **kwargs) 

     frame1 = tk.Frame(root, padx=2, pady=2, borderwidth=2, relief="raised") 
     frame1.pack(side=tk.RIGHT) 

     button_01 = tk.Button(self, text ="tk Button 1") # self with tk.Button 
     button_01.config(width=15, fg="black", bg="lightskyblue") 
     button_01.pack(side=tk.BOTTOM) 

     button_02 = tk.Button(root, text ="tk Button 2") # root with tk.Button 
     button_02.config(width=15, fg="black", bg="lime") 
     button_02.pack(side=tk.BOTTOM) 

     button_03 = tk.Button(frame1, text ="tk Button 3") # frame1 with tk.Button 
     button_03.config(width=15, fg="black", bg="lightcoral") 
     button_03.pack(side=tk.TOP) 

if __name__ == "__main__": 
    root = tk.Tk() 
    app = App(root) 
    app.pack(fill="both", expand=True) 
# 
    root.mainloop() 
+0

, 이것은 파이썬 스크립트입니다 –

답변

0

아니, selfroot는 동일하지 않습니다. 위젯은 단일 루트로 나무 같은 계층 구조로되어 있습니다. tk.Tk()에 전화하면이 루트 창을 만듭니다.

self은 메서드가 속한 개체를 나타냅니다. 이 경우 위젯은 tk.Frame의 하위 클래스이며 하위 클래스는 root입니다.

(예를 들어 프레임을 배경 색상을 제공 시도해보십시오. self.configure(background="red")하고 버튼을 다른 부모가 있음을 볼 수는 GUI를 사용 여부를이 특정 예에서 같은 모양이와 매우 간단한 GUI를 만하기 때문에 root 또는 self . 매우 간단한 레이아웃 미안 해요

+0

나는 당신의 제안을 가져다 추가 :. self.configure을 (배경 = "빨간색") root.configure (배경 = "녹색") frame1.configure (background = "blue") 이렇게하면 GUI에 세 가지 영역이 있음을 알 수 있습니다. –