在python 3.6.1,Tkinter中无限延长的窗口

时间:2017-05-06 17:13:54

标签: python tkinter

我正在制作一个有各种方程式的医学计算器。 这有一个小菜单,用户可以从一个转换为另一个。 但是当我测试这个时,我发现GU​​I窗口变得越来越长而不会破坏预先创建的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)。我认为当我从一个等式到另一个等式时,它不会产生任何错误。这是我的关键错误吗?

1 个答案:

答案 0 :(得分:1)

让我们看看你的一个功能......

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

此函数包含对F的分配,并且没有F的全局声明,因此F是此函数中的局部变量 - 完全不相关您的全局F变量。每次销毁并重新创建F时,您实际上都会重新销毁原始全局F,并在您的窗口中添加全新的本地F。因此,无限增长。您需要为每个函数添加global F