无法使grid_remove()正常工作
在我正在开发的应用程序中,有一个类专门用来处理所有的图形界面(GUI)。这个类里面有一个方法,它会创建一个框架,并通过一个循环来填充一组单选按钮。这个方法会被外部多次调用,以重新绘制这个框架。现在我遇到的问题是,当框架被重新绘制时,其实只是覆盖了原来的框架(旧的框架还在)。所以如果在后面的调用中选项变少,之前的选项仍然会显示出来。我尝试在框架之前使用grid_remove,但一直没能成功。所以我想知道,为什么下面的initMech()方法中的grid_remove()没有起作用?
#!/usr/bin/env python
from Tkinter import *
class MWindow(Frame):
def __init__(self, parent) :
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
topframe = Frame(self.parent, bd=2, relief=GROOVE, padx=5, pady=5, width=300, height=50)
topframe.grid(row=0, column=0)
desc = Button(topframe, text="list1", command=lambda:set_list(1))
desc.grid(row=0,column=1)
desc2 = Button(topframe, text="list2", command=lambda:set_list(2))
desc2.grid(row=0,column=2)
def initMech(self):
try:
radio_frame.grid_remove()
except:
print "can't remove"
radio_frame = Frame(self.parent, bd=2, relief=GROOVE, padx=5, pady=5, width=300, height=50)
radio_frame.grid(row=1, column=0)
variant=StringVar()
c = 0
for x in chas.v_list:
Radiobutton(radio_frame, text=x,variable=variant, value=x, command=lambda x = x:chas.set_vari(x)).grid(row=0, column=c)
c = c+1
def onExit(self):
self.parent.destroy()
class Mech():
def set_chass(self,chass):
try:
if self.chassis == chass:
pass
else:
self.chassis = chass
del self.vari
except AttributeError:
self.chassis = chass
def load_vari(self):
if self.chassis == 1:
self.v_list = ["a","b","c"]
else:
self.v_list = ["w", "x", "y", "z"]
win.initMech()
def set_vari(self, vari):
self.vari = vari
def set_list(num):
chas.set_chass(num)
chas.load_vari()
root = Tk()
win = MWindow(root)
chas = Mech()
root.mainloop()
1 个回答
1
这个不管用是因为你用的一个叫 radio_frame
的局部变量,但这个变量还没有定义。你可能忽略的错误信息其实就是在告诉你这一点。你为什么要去移除一个还没创建的框架呢?
另外,你知道 grid_remove
只是把这个小部件从视图中移除,并没有把它销毁吗?所以如果你多次调用这个函数,就会有好几个看不见的这个框架在占用内存。