2016-08-12 3 views
0

내 질문을 단순화하고 질문을 명확하게 전달하기 위해 이전 질문을 삭제했습니다. 그 안에 여러 클래스가있는 프로젝트가 있는데 버튼을 클릭하면 캘린더를 새 창에 표시하고 싶습니다. 현재 내 전체 스크립트 내에서 사소한 변경 내용이있는 this 캘린더 스크립트를 사용하고 있습니다. 이 같은 일정 스크립트의 첫 번째 부분에서 최상위 레벨에 프레임을 변경 :Tkinter, 버튼 클릭시 Toplevel 창에 캘린더 표시

class Calendar(tk.Toplevel): 

    def __init__(self, parent, **kw): 

     Toplevel.__init__(self, parent, **kw) 

지금이 내 스크립트의 나머지와 함께 최상위 레벨 창에서 달력을 만들 않지만 그것은 바로 프로그램이 그대로을한다 시작되었습니다. 나중에 사용자가 호출 할 때 표시하려고합니다.

예 :

def show_Calendar(self): 
    '''shows calendar''' 
    toplevel = Toplevel() 
    toplevel.Calendar.place(x=0, y=0) 

버튼은 창을 만들 않지만 그 안에 아무것도 :이 부를 것이다

class Application(tk.Tk): # tk.Tk creates main window 

    def __init__(self): 
     tk.Tk.__init__(self) 

     self.title("T") 
     self.geometry('550x320')#x,y 
     self.create_options() 
     self.calendar = Calendar(self) 

    def create_options(self): 
     self.widgets = tk.Frame(self) 
     tk.Button(self, 
       text = "...", command=self.show_Calendar 
       ).place(x=525, y=130) 

. 이 캘린더를 버튼을 클릭 할 때 나타나는 창에만 표시되도록하는 가장 좋은 방법은 무엇입니까?

답변

1
self.calendar = Calendar(self) 

응용 프로그램을 작성하는 것과 같은 시간에 그것을 만들 것입니다 응용 프로그램 init 내에서이 줄을 퍼팅. 이것을 show_Calendar 방법으로 옮기고 싶습니다.

def show_Calendar(self): 
    '''shows calendar''' 
    toplevel = Toplevel() 
    toplevel.Calendar.place(x=0, y=0) 

toplevel = Toplevel() 여기서는 의미가 없습니다. 빈 Toplevel을 만들고이를 로컬 변수로 만듭니다. 이 Toplevel이 아니며은 (는) 캘린더와 관련이 없습니다. 일정 스크립트 내에서

, 당신은 일정 클래스는 Toplevel에서 상속 확인했다, 그래서 당신은 달력을 만드는 모든 시간, 그것은 Toplevel 자체에 첨부됩니다.

def show_Calendar(self): 
    '''shows calendar''' 
    self.calendar = Calendar(self) 

당신이 그것을 삭제하기 전에 나는 당신의 이전 질문에서보고되었으며, 사용자 변경이 집중 경우 당신은 또한 달력을 제거하려는 경우, 당신은 여기 Events and Bindings에 특별히 <FocusOut>을 보일 것입니다.

+0

'Calendar' 인스턴스에'place'를 호출하는 이유는'Toplevel'입니다. 실제로'place'를 호출하면'Toplevel'의 인스턴스에'place' 함수가 없으므로 오류가 발생합니다. –

+0

알겠습니다. 나는 선을 제거했다. – Hobbes

+0

@Hobbes 대단히 감사합니다! 나는 길을 찾으려고 지난 며칠 동안 웹을 수색 해왔다. 도움을 감사하십시오! – TheHoff

관련 문제