2014-12-09 4 views
0

파이썬 3.4.0.컨테이너 (tkinter)로 프레임

당신은 내가 여기에 무슨 일이 일어나고 있는지 이해하는 데 도움이 수 :

from tkinter import * 
root = Tk() 

f = Frame(root, borderwidth=2) # 
for relief in [RAISED, SUNKEN, FLAT, RIDGE, GROOVE, SOLID]: 
    Label(f, text=relief, width=10, relief = relief).pack(side=LEFT) # 
    #f = Frame(root, borderwidth=2, relief = relief) 
    #Label(f, text=relief, width=10).pack(side=LEFT) 
    f.pack(side=LEFT, padx=5, pady=5) 
root.mainloop() 

지금은 줄을 주석 및 결과가 동일 끝에 '#'표시를 HAFE 라인 주석의 주석을 해제합니다.

첫 번째 경우 : 현재 상황. 나에게 이해할 수있다. 루프 전에 프레임을 만듭니다. 그런 다음 pack 메소드는 각 레이블을 상위 위젯에 배치합니다 (f). 이 경우 f는 확장되고 여러 레이블을 포함합니다.

글쎄, 두 번째 경우 : 만약 내가 코멘트를 전환합니다. 프레임 f는 항상 새로운 것입니다. 레이블도 항상 새로운 것입니다. 레이블은 항상 별도의 프레임에 배치됩니다. 5 프레임이 각 프레임마다 다른 레이블로 표시 될 것을 제안합니다.

왜 결과가 같은지 이해할 수 있도록 도와 주시겠습니까? 그래서, 당신은 Frame 대신 Toplevel 위젯을 사용해야하는 경우 등

, 이동 닫을 수 있습니다 각각의 다섯 개 별도의 창을 원하는처럼

+0

음 ... 프레임이 보이지 않습니까? 따라서 5 개의 프레임을 사용하든 하나의 프레임을 사용하든 관계없이 결과는 같습니다. – Kevin

+0

당신을 이해할 수 없습니다. 나는 프레임이 별도의 창을 나타낼 것이라고 말하고 싶습니다.이 창은 닫고, 드래그하고, 크기를 조절합니다. 내가 틀렸습니까? – Michael

+0

"프레임"대신에 "최상위"를 원한다고 생각합니다. 그러나 최상위 창을 압축 할 수 없으므로'f.pack' 행을 삭제해야합니다. – Kevin

답변

0

는 소리.

from tkinter import * 
root = Tk() 

for relief in [RAISED, SUNKEN, FLAT, RIDGE, GROOVE, SOLID]: 
    t = Toplevel(root, borderwidth=2, relief = relief) 
    Label(t, text=relief, width=10).pack(side=LEFT) 
root.mainloop()