2012-05-18 3 views
0

저는 python을 처음 접했고 tkinter를 사용하면서 모듈을 만들려고 노력했습니다. 상위 메뉴에 사용할 기본 모듈과 tkinter 객체를 사용하는 보고서가있는 또 다른 모듈이 있습니다.모듈을 통한 Tkinter 사용

제 스크립트

 from Tkinter import * 
     from wind import * 
     menu=Tk() 
     menu.geometry('200x200') 
     Button(menu,text="push",command=wind.gui).pack() 
     menu.mainloop() 

번째 스크립트 아래 wind.py이며 아래와 같이 main.py이다.

from Tkinter import * 

    class wind: 
    @staticmethod 
    def getting(): 
     print y2,y2.get() 

    @staticmethod 
    def gui(): 
     global y2 
     main=Tk() 
     main.geometry('300x300+100+100') 
     y2=StringVar() 
     Entry(main, textvariable=y2, width=40).pack() 
     Button(main, text="Run", command=wind.getting).pack() 
     main.mainloop() 

코드가 정상적으로 작동하는 것 같습니다. 그러나 tkinter 버튼의 y2 값은 비어 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다 !!

+0

Tkinter는'Tk' 클래스의 인스턴스 두 개와'mainloop' 인스턴스 두 개를 실행하도록 설계되지 않았습니다. 왜 당신은'Tk'의 두 인스턴스가 필요한가요? –

답변

0

브라이언이 바로 거기에 있습니다. 두 개의 메인 루프를 사용하면 이상하게 보입니다. Tkinter에서 2 차 루프를 시작하는 경우가 있지만 그렇지 않은 경우가 있습니다.

y2가 정의 된 곳을 모르지만 모듈의 전역은 전체 프로그램의 전역 공간이 아닌 해당 모듈의 전역 공간을 나타냅니다. 적어도 globals() 함수와 글로벌 키워드에 대한 어프로치에 대해서는 this note으로 해석합니다.

나는 wind.py하려면 다음 변경 한 프로그램에서보다 합리적인 응답을 얻었다 : 나는 Y2 wind.py 모듈의 실제 글로벌 수준의 변수를 만들어

from Tkinter import * 

y2 = None 

class wind: 
    @staticmethod 
    def getting(): 
     print y2, y2.get() 

    @staticmethod 
    def gui(): 
     global y2 
     main=Toplevel() 
     main.geometry('300x300+100+100') 
     y2 = StringVar() 
     Entry(main, textvariable=y2, width=40).pack() 
     Button(main, text="Run", command=wind.getting).pack() 
     #main.mainloop() 

공지 사항, 주요 만들어를가 수 Toplevel() widget을 사용하고 gui()의 끝에있는 가짜 mainloop()을 주석 처리했습니다 (이미 첫 번째 창에서 메인 루프에 있으므로).

+0

고마워요! 그것은 작동합니다! –

+0

만약 그렇다면 해결책으로 그의 대답을 확인하십시오. – memilanuk