2017-05-06 4 views
0

나는 다양한 방정식을 가진 의학 계산기를 만들고 있습니다. 작은 메뉴가 있으며 사용자는 메뉴를 변환 할 수 있습니다. 그러나 이것을 테스트했을 때 GUI 창이 미리 만들어진 F 프레임을 파괴하지 않고 길어지고 길게 나왔다는 것을 알게되었습니다. :파이썬 3.6.1, Tkinter에서 무한히 길쭉한 창

이 문제를 설명해 주시겠습니까? 감사합니다.

이이 단축되는 코드.

import tkinter 
import math 
top = Tk() 
F = Frame(top, width = 512, height = 512) 
F.pack() 

def temp(): 
    print("This is temporary function") 

def fena(): 
    F.destroy() 
    making_fena() 

def making_fena: 
    F= Frame(top) 
    F.pack() 
    ..... 
    #every widgets are attached to this F frame by grid. 
    .... 

def bsa(): 
    F.destroy() 
    making_bsa() 

def making_bsa(): 
    F.destroy() 
    F = Frame(top) 
    F.pack() 
    .... 
    #every widgets are attached to this F frame by grid. 
    ... 

#Making a menu 
#Basic menu 1: Calc - FeNa - GFR - BSA 
#Basic Menu 2: Quit 
menubar = Menu(top) 
calcmenu = Menu(menubar, tearoff = 0) 
calcmenu.add_command(label = "FeNa", command = fena) 
calcmenu.add_command(label = "GFR", command = temp) 
calcmenu.add_command(label = "BSA", command = bsa) 
menubar.add_cascade(label = "Calc", menu = calcmenu) 

menubar.add_command(label = "Quit", command = top.quit) 

top.config(menu = menubar) 

#loop running 
top.mainloop() 

나는 의도적으로 모든 수식에 대해 동일한 프레임 이름 (F)을 사용했다. 나는 그것이 내가 전역 한 방정식에서 다른 어떤 실수를하지 않을 생각했다. 이게 내 중요한 실수 야?

이 기능은 F에 할당, F의 전역 선언을 포함

def making_fena: 
    F= Frame(top) 
    F.pack() 

예에 대한 기능 중 하나에서

답변

1

살펴 보자 ... 따라서 F이 기능에 지역 변수입니다 - 전체 귀하의 글로벌 F 변수와 관련이 없습니다. F을 파괴하고 다시 만들 때마다 원래의 세계 F을 다시 파괴하고 새로운 로컬 F을 창에 추가합니다. 따라서, 무한히 성장합니다. 이와 같이 각 기능에 global F을 추가해야합니다.

관련 문제