2017-05-06 49 views
0

我正在製作一個具有各種方程式的醫療計算器。 這有一個小菜單,用戶可以從一個轉換到另一個。 但是,當我測試這一點,我已經發現了該GUI窗口越來越長,不破壞預先創建的F框架.. :(在python 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)。我認爲這不會讓我對面的一個方程到另一個時的任何錯誤。這是我的嚴重錯誤嗎?

回答

1

讓我們看看你的函數的一例中的一...

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

此功能包含一個分配F,並F沒有全球性的聲明,因此F是這個功能的局部變量 - 完全與您的全球F變量無關。每次您銷燬並重新創建F時,您都會重新銷燬原始全球F,並在您的窗口中添加一個全新的本地F。因此,無限增長。您需要爲這樣的每個功能添加global F