2017-10-25 6 views
0

프레임의 단추 모양과 다른 프레임의 항목을 처리하려고하는 코드가 있습니다. 하지만 두 창안자와 별개로 작동하지 않는 것 같습니다. 위의 코드에서 모듈을 모듈화로 관리 할 수 ​​있습니까?

try:      # In order to be able to import tkinter for 
    import tkinter as tk # either in python 2 or in python 3 
except ImportError: 
    import Tkinter as tk 


class NumPad(tk.Frame): 
    def __init__(self, master): 
     tk.Frame.__init__(self, master) 
     self.button = tk.Button(text=0) 
     self.button.grid(row=1, column=0, sticky='nsew') 


class CalcFrame(tk.Frame): 
    def __init__(self, master): 
     tk.Frame.__init__(self, master) 
     self.entry = tk.Entry(self) 
     self.entry.pack() 


if __name__ == '__main__': 
    root = tk.Tk() 
    frame1 = CalcFrame(master=root) 
    frame2 = NumPad(master=root) 
    frame1.grid(row=0, column=0) 
    frame2.grid(row=1, column=0, sticky='nsew') 
    root.mainloop() 

나는 대체 할 경우 :

self.button.grid(row=0, column=0, sticky='nsew') 

로 : frame2

self.button.grid(row=1, column=0, sticky='nsew') 

위젯이 frame1에 위젯을 겹칩니다. 위젯 단위로 내부 격자를 만들려면 어떻게해야합니까? 현재 최상위 레벨 그리드가 하나 밖에없는 것처럼 보입니다.

브라이언 오클리 위의 댓글에서 지적
+0

글쎄, 당신이있어 보인다 무엇 당신이 그 변화를하지 않는다면, 왜 변화를 원합니까? –

+1

버튼에 부모/마스터를 지정하지 않으므로 기본값은 루트 창입니다. –

+0

@BryanOakley 예 버튼에이 설정 마스터 매개 변수를 해결할 수 있었다고 생각합니다. 감사합니다! – Nae

답변

2

,이 줄에 Button 위젯을 선언 할 때 ...

self.button = tk.Button(text=0) 
당신이 그것을 그냥 Tk() 자체로 덤프 것을 의미 부모를 할당하지 않습니다

기본적으로 윈도우. 보조 노트에

, 당신은 자신의 이름으로 그들이 Frame 위젯 (즉 frame1frame2)이 있음을 시사하지만, 실제로 어느 Frame 위젯을 사용하지 않는 클래스에 대한 참조로 표시 변수가 있습니다.

Frame 위젯은 매우 강력하며 동일한 창에서 위젯 세트를 쉽게 분리하는 데 사용할 수 있습니다. Frames를 사용하는 예는 아래에서 확인할 수 있습니다

from tkinter import * 

root = Tk() 

frame1 = Frame(root, borderwidth=1, relief="solid") 
frame2 = Frame(root, borderwidth=1, relief="solid") 

frame1.pack(side="left", fill="both", expand=True, padx=10, pady=10) 
frame2.pack(side="right", fill="both", expand=True, padx=10, pady=10) 

label1 = Label(frame1, text="I'm inside a frame") 
label2 = Label(frame2, text="I'm inside a different frame") 

label1.pack() 
label2.pack() 

root.mainloop() 

이것은 당신이 부모에 다른 형상 관리자 사용하여 위젯을 가질 수 있음을 보여줍니다

from tkinter import * 

root = Tk() 

frame1 = Frame(root) 
frame2 = Frame(root) 

frame1.pack(side="left") 
frame2.pack(side="right") 

label1 = Label(frame1, text="I'm grid") 
label2 = Label(frame1, text="I'm grid") 
label3 = Label(frame2, text="I'm pack") 
label4 = Label(frame2, text="I'm pack") 

label1.grid(row=0, column=0) 
label2.grid(row=0, column=1) 
label3.pack() 
label4.pack() 

root.mainloop() 
+0

그래도 지포스가 .pack에 의해 관리되는 위젯이있는 프레임을 그리드 할 수는 없습니다.이게 정상입니까? – Nae

+1

@Nae 가장 정확한 지오메트리 관리자가 부모보다 위젯을 가질 수 있음을 입증하기 위해 제 대답을 업데이트했습니다. 할 수없는 일은 동일한 부모 내에 여러 개의 지오메트리 관리자가있는 것입니다. –