2012-07-16 4 views
1

현재 파이썬에서 Tkinter 모듈을 사용하는 프로젝트에서 작업 중입니다. 나는 메뉴 위젯을 사용하고 있으며 메뉴의 각 명령에 관련된 다른 명령이 있습니다. 이 명령들 각각은 새로운 프레임을 엽니 다. 그리드 지오메트리 관리자를 사용하고 있습니다.파이썬에서 Tkinter의 다른 프레임으로 전환하는 방법

내 문제는 사용자가 프레임간에 전환 할 수 있기를 원하지만이 작업을 시도 할 때 프레임이 전환하는 대신 서로 겹칩니다. 활성 프레임을 숨기고 새 프레임을 열려면 어떻게합니까? 가능한 프레임 목록을 반복하여 모두 숨겨야한다고 말하고 싶지 않습니다.

import Tkinter as tkinter 
root = tkinter.Tk() 
root.minsize(400,300) 
welcome = tkinter.Frame(root).grid() 
label = tkinter.Label(welcome, text="Welcome to my program").grid(row=0, column=3) 
button = tkinter.Button(welcome,text="Exit",command=root.destroy).grid(row=3, column=1) 
def newFrame(): 
     newFrame = tkinter.Frame(root).grid() 
     newFrame_name = tkinter.Label(newFrame, text="This is another frame").grid() 
menu = tkinter.Menu(root) 
root.config(menu=menu) 

main_menu = tkinter.Menu(menu) 
menu.add_cascade(label="Main Menu", menu= main_menu) 
main_menu.add_command(label="New Frame", command=newFrame) 

#menu.add_command(label="Exit", command=root.destroy, menu= filemenu) 


root.mainloop() 

사용자가 메뉴에서 새 프레임 옵션을 선택하고, 나는 NEWFRAME는 환영 프레임을 교체하려면 : 여기

는 지금까지 작성한 코드입니다.

답변

1

place 또는 grid을 사용하여 프레임을 서로 겹쳐서 사용하는 경우 lift 방법으로 스태킹 순서를 간단히 변경할 수 있습니다.

+0

나는 이것을 시도했지만 'NoneType'객체에는 'lift'라는 속성이 없다는 오류가 계속 발생합니다. 또한 리프트 방법으로 볼 수있는 다른 모든 프레임이 지워지거나 내가 선택한 특정 프레임을 올리겠습니까? – jules

+0

@juleszero : '리프트'는 한 프레임 만 올립니다. NoneType 오류에 대해서는 "왜이 개체가 없음으로 설정되어 있습니까?"라고 자문 해보십시오. 내 생각 엔'frame = Frame (...). grid (...)'와 같이'frame'을 None으로 만드는 것입니다. 요컨대, 코드에 'None'으로 설정된 변수에 'lift'를 호출하는 버그가 있습니다. 어떤 코드도 게시하지 않았으므로 이제는 더 이상 명확하지 않습니다. –

+0

그게 정확히 내 모든 프레임을 설정하는 방법이야! 나는 그것으로 인해 'None'으로 설정되는 것을 인식하지 못했습니다. 내 코드를 내 게시물을 업데이 트했습니다 잘하면 도움이됩니다. – jules

관련 문제