我正在使用下拉菜单创建几个小部件.我想在删除之前检查小部件是否存在(来自下拉菜单上的先前选择).我使用以下代码:
self.ndim_options, self.ndim_options_var = self.DropdownMenuCommand(("1","2","3"),'-',"Number of indirect dimensions","-")
def DropdownMenuCommand(self,options,status,name,row):
if row == "-":
row = self.row
optionLabel = tk.Label(self.frame, bg='turquoise')
optionLabel["text"] = name
optionLabel.grid(row=row, column=0, sticky='w')
var = tk.StringVar(self)
var.set(status)
w = tk.OptionMenu(self.frame, var, *options, command = self.setdimensionproperties)
w.config(bg = 'paleturquoise')
w["menu"].config(bg = 'paleturquoise')
w.grid(row=row, column=1)
self.row += 1
return w, var
def setdimensionproperties(self,val):
row = self.RowEnd
if val == "3": #Set parameters for a 4D (3 indirect dimensions)
#Remove any existing weighting functions
if self.weightingFuncNameDim2.winfo_exists():
self.weightingFuncNameDim2.grid_remove()
self.weightingFuncNameDim2, self.weightingFuncNameDim2_var = self.DropdownMenu(("sinebell","gaussian", "sinebell2"),'-', "Weighting function dimension 2",row)
Run Code Online (Sandbox Code Playgroud)
但是,如果尚未创建窗口小部件,则会出现属性错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 3141, in __call__
self.__callback(self.__value, *args)
File "test.py", line 224, in setdimensionproperties
if self.weightingFuncNameDim2.winfo_exists():
AttributeError: Window instance has no attribute 'weightingFuncNameDim2'
Run Code Online (Sandbox Code Playgroud)
理想情况下,如果1窗口小部件存在,我希望if语句返回,0如果不存在,这就是我的想法.winfo_exists().我怎样才能解决这个错误?另外,我如何确保.grid_remove删除小部件和标签?
我看到三种可能的解决方案 按优先顺序排列:
添加self.weightingFuncNameDim2 = None到您的班级__init__方法,并将您的if条件更改为if self.weightingFuncNameDim2 is not None and self.weightingFuncNameDim2.winfo_exists():
把你的病情改为 if hasattr(self, "weightingFuncNameDim2") and self.weightingFuncNameDim2.winfo_exists():
将您的if块放在try-except块中,该块捕获并忽略AttributeErrors.
| 归档时间: |
|
| 查看次数: |
2211 次 |
| 最近记录: |