Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 3.6.1中的无限长窗口,Tkinter_Python_Tkinter - Fatal编程技术网

python 3.6.1中的无限长窗口,Tkinter

python 3.6.1中的无限长窗口,Tkinter,python,tkinter,Python,Tkinter,我正在做一个有各种方程式的医学计算器。 这有一个小菜单,用户可以从一个转换到另一个。 但当我测试这个时,我发现GUI窗口越来越长,而不会破坏预先创建的F帧..: 我不知道发生了什么事。你能解释一下这个问题吗? 谢谢 这是缩写代码 import tkinter import math top = Tk() F = Frame(top, width = 512, height = 512) F.pack() def temp(): print("This is temporary funct

我正在做一个有各种方程式的医学计算器。 这有一个小菜单,用户可以从一个转换到另一个。 但当我测试这个时,我发现GUI窗口越来越长,而不会破坏预先创建的F帧..:

我不知道发生了什么事。你能解释一下这个问题吗? 谢谢

这是缩写代码

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。我认为当我从一个方程到另一个方程时,它不会有任何错误。这是我的严重错误吗?

让我们看看您的一个函数的示例

def making_fena:
   F= Frame(top)
   F.pack()
此函数包含对F的赋值,并且没有F的全局声明,因此F是此函数中的局部变量-与全局F变量完全无关。每次你销毁并重新创建F,你实际上是在销毁原来的全局F,并在你的窗口中添加一个全新的本地F。因此,无限增长。您需要像这样向每个函数添加全局F