设置Tkinter变量触发TypeError: set()缺少value参数问题咨询
报错原因
你定义的tkvars列表中存储的是tk.IntVar、tk.DoubleVar等Tk变量类本身,而非类的实例。当前代码直接将类赋值给wvar后调用set方法,属于调用类的未绑定方法,需要手动传入实例对象作为第一个self参数,因此解释器会判定你传入的val是第二个参数,提示缺少必填的value参数。
解决方法
所有获取Tk变量的位置都要先实例化对应类,再调用set方法,将wvar = tkvars[x]的写法修改为wvar = tkvars[x]()即可,也可以在实例化时直接传入初始值省略单独的set调用。
修改后的参考代码:
if ftype == 1: ## CHECKBOX # 实例化BooleanVar类,直接传入初始值 wvar = tkvars[2](value=val) return wvar elif ftype == 2: ## RADIO wvar = tkvars[0](value=val) self._radiovar.append(wvar) return wvar elif ftype == 3: ## SLIDERS if str(type(val)) in vartype: vix = vartype.index(str(type(val))) # 先实例化对应类型的Tk变量 wvar = tkvars[vix](value=val) print(">>>>>>>>>>>>>>>>>SLIDER", tkvars[vix], vix, wvar, val) return wvar
如果你的Tk变量需要绑定到指定父窗口,可以在实例化时传入master参数:wvar = tkvars[vix](master=父控件对象, value=val)。
内容的提问来源于stack exchange,提问作者Michel
相关产品推荐
相关产品推荐

